一个demo

我们现在利用结构体来实现一个计算长方形面积的代码。

我决定搞的面向对象一些,因此在这里使用结构体。

struct Rectangle {width: u32,height: u32,
}fn main() {let rect1 = Rectangle {width: 43,height: 53}; // 不可变借用println!("area of rect is {}", area(&rect1));
}fn area(rect: &Rectangle) -> u32{rect.width * rect.height
}

通过派生 trait 增加实用功能

有一些语言比如JS、Go可以直接打印一些复合类型变量,十分方便,试一试Rust可不可以。

println!("area of rect is {}\n{}", area(&rect1), rect1);
error[E0277]: `Rectangle` doesn't implement `std::fmt::Display`
`Rectangle` cannot be formatted with the default formatter= help: the trait `std::fmt::Display` is not implemented for `Rectangle`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead

可以看到这里给出了两条报错和建议。

  • 没有为Rectangle实现 std::fmt::Dispaly 这个 trait
  • 在格式化字符串中可以使用 {:?} or {:#?} 替代

所以改进一下代码

println!("area of rect is {}\n{:#?}", area(&rect1), rect1);
= help: the trait `Debug` is not implemented for `Rectangle`
= note: add `#[derive(Debug)]` or manually implement `Debug

然后又提示,添加 #[derive(Debug)] 或手动实现Debug。

我们这里在结构体上面添加这行代码。

#[derive(Debug)]
struct Rectangle {width: u32,height: u32,
}

最后完美运行

area of rect is 2279
Rectangle {width: 43,height: 53,
}

Rust 为我们提供了很多可以通过 derive 注解来使用的 trait,他们可以为我们的自定义类型增加实用的行为。附录 C 中列出了这些 trait 和行为。第十章会介绍如何通过自定义行为来实现这些 trait,同时还有如何创建你自己的 trait。

我们的 area 函数是非常特殊的,它只计算长方形的面积。如果这个行为与 Rectangle 结构体再结合得更紧密一些就更好了,因为它不能用于其他类型。现在让我们看看如何继续重构这些代码,来将 area 函数协调进 Rectangle 类型定义的 area 方法 中。

我的RUST学习——【第五章 5-2】一个使用结构体的demo相关推荐

  1. MATLAB学习第五章矩阵

    MATLAB学习第五章 5.1矩阵 矩阵元素修改 矩阵运算 5.1矩阵 eye(n):创建n×n的矩阵 eye(m,n):创建m×n的矩阵 eye(size(A)):创建与A维数相同的单位阵 ones ...

  2. 金融经济学(王江)第五章 期权:一个套利定价的例子

    完全市场期权定价 第五章 期权:一个套利定价的例子 5.1 期权的性质 5.1.1 期权的定义: 5.1.2期权价格影响因素: 5.1.3 期权的价值: 5.1.4 期权的价格上下界 5.2关于期权是 ...

  3. P-Link ARM Cortex-M脱机编程器开源前的一些准备工作----第四章 几个重要的结构体介绍

    在第二章有提到,SPI Flash预留了2MB来存储目标单片机的固件以及配置信息的,那么相对应的SPI Flash前面会有一个区域用来存储这些信息. T-FLASH_HEAD_INFO结构体描述: t ...

  4. 我的RUST学习——【第九章 9-1】panic! 与不可恢复的错误

    突然有一天,代码出问题了,而你对此束手无策.对于这种情况,Rust 有 panic! 宏.当执行这个宏时,程序会打印出一个错误信息,展开并清理栈数据,然后接着退出.出现这种情况的场景通常是检测到一些类 ...

  5. matlab学习-第五章-代数方程求解和其它符号工具

    解基本代数方程 x = solve('x+8') 书上的例子是这样的,但是我试了一下发现会报错,可能是版本的问题,新的版本写方程式要这样写: syms x eqn = sin(x) == 1; sol ...

  6. Intel汇编语言程序设计学习-第五章 过程-下

    5.3.3  库测试程序 测试程序#1:整数I/O 该测试程序把输出文本的颜色改为蓝底黄字,然后以十六进制数显示七个数组的内容,最后提示用户输入一个有符号整数,再分别以十进制.十六进制和二进制格式重复 ...

  7. Intel汇编语言程序设计学习-第五章 过程-上

    过程 5.1  简介 需要阅读本章的理由可能很多: 1.读者可能想要学习如何在汇编语言中进行输入输出. 2.应该了解运行时栈(runtime stack),运行时栈是子过程(函数)调用以及从子过程返回 ...

  8. linux用户没有创建文件的权限设置密码,Linux学习第五章用户身份与文件权限

    一.用户身份与能力 Linux系统中一共有三种用户 第一种:管理员  root  UID =0 第二种:系统用户 不需要登录系统  负责单一服务的运行  UID = 0-1000 第三种:普通用户 日 ...

  9. MsSQL学习第五章---排序和分页

    1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示 SELECT last_name,department_id,salary*12 annual_salary FROM employee ...

最新文章

  1. Swift学习——Swift解释特定的基础(七)
  2. pythontcp服务器框架_tcp服务器框架python
  3. AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:55-10:40刘欢教授《Challenges in Combating Disinformation》
  4. TCP 三次握手 / 四次挥手
  5. 线程池 Executors2
  6. SAP Hybris的build callback和SAP ABAP的SGEN事务码
  7. SpringMVC 、Struts的区别
  8. leveldb登山之路——cache
  9. 下载--保存(下载)文件到本地(.doc .jpg)
  10. 大数据:技术与应用实践指南
  11. 黑马 Python学习笔记之第一个 Python 程序
  12. android加载dex方法,[原创]分享一个快速加载dex文件的方法
  13. 解决IE上登陆oracle OEM时报:“证书错误,导航已阻止”且无继续浏览的错误
  14. python 重定向 网址错_Python URL重定向问题
  15. 单片机——BH1750光照传感器篇
  16. python与人工智能:KNN近邻法识别手写数字
  17. 采集页面之后css布局混乱之rem适配布局
  18. Charles安装及使用教程
  19. java后端和web_从java和web角度分析前端好还是后端好
  20. 编程计算1!+2!+3!+…+N!

热门文章

  1. 2021年安全员-C证证考试及安全员-C证实操考试视频
  2. 电脑配件 - 如何选择合适的内存条?- 学习/实践
  3. 【转】丰田栽了的原因,嵌入式软件工程师都该看看
  4. 工厂机制(注册,创建,覆盖)
  5. 解决elasticsearch开启外网访问,绑定IP下,浏览器访问超时问题
  6. 阿里云的内容识别技术可以实现哪些场景下的智能化应用?
  7. Docker 常见命令
  8. 制定项目管理计划有什么作用呢?
  9. 华为q1设置虚拟服务器,华为路由器Q1手机设置教程
  10. 计算机毕业设计Java公司配件库存管理系统设计与实现(源码+系统+mysql数据库+Lw文档)