我的RUST学习——【第五章 5-2】一个使用结构体的demo
一个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相关推荐
- MATLAB学习第五章矩阵
MATLAB学习第五章 5.1矩阵 矩阵元素修改 矩阵运算 5.1矩阵 eye(n):创建n×n的矩阵 eye(m,n):创建m×n的矩阵 eye(size(A)):创建与A维数相同的单位阵 ones ...
- 金融经济学(王江)第五章 期权:一个套利定价的例子
完全市场期权定价 第五章 期权:一个套利定价的例子 5.1 期权的性质 5.1.1 期权的定义: 5.1.2期权价格影响因素: 5.1.3 期权的价值: 5.1.4 期权的价格上下界 5.2关于期权是 ...
- P-Link ARM Cortex-M脱机编程器开源前的一些准备工作----第四章 几个重要的结构体介绍
在第二章有提到,SPI Flash预留了2MB来存储目标单片机的固件以及配置信息的,那么相对应的SPI Flash前面会有一个区域用来存储这些信息. T-FLASH_HEAD_INFO结构体描述: t ...
- 我的RUST学习——【第九章 9-1】panic! 与不可恢复的错误
突然有一天,代码出问题了,而你对此束手无策.对于这种情况,Rust 有 panic! 宏.当执行这个宏时,程序会打印出一个错误信息,展开并清理栈数据,然后接着退出.出现这种情况的场景通常是检测到一些类 ...
- matlab学习-第五章-代数方程求解和其它符号工具
解基本代数方程 x = solve('x+8') 书上的例子是这样的,但是我试了一下发现会报错,可能是版本的问题,新的版本写方程式要这样写: syms x eqn = sin(x) == 1; sol ...
- Intel汇编语言程序设计学习-第五章 过程-下
5.3.3 库测试程序 测试程序#1:整数I/O 该测试程序把输出文本的颜色改为蓝底黄字,然后以十六进制数显示七个数组的内容,最后提示用户输入一个有符号整数,再分别以十进制.十六进制和二进制格式重复 ...
- Intel汇编语言程序设计学习-第五章 过程-上
过程 5.1 简介 需要阅读本章的理由可能很多: 1.读者可能想要学习如何在汇编语言中进行输入输出. 2.应该了解运行时栈(runtime stack),运行时栈是子过程(函数)调用以及从子过程返回 ...
- linux用户没有创建文件的权限设置密码,Linux学习第五章用户身份与文件权限
一.用户身份与能力 Linux系统中一共有三种用户 第一种:管理员 root UID =0 第二种:系统用户 不需要登录系统 负责单一服务的运行 UID = 0-1000 第三种:普通用户 日 ...
- MsSQL学习第五章---排序和分页
1. 查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序显示 SELECT last_name,department_id,salary*12 annual_salary FROM employee ...
最新文章
- Swift学习——Swift解释特定的基础(七)
- pythontcp服务器框架_tcp服务器框架python
- AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:55-10:40刘欢教授《Challenges in Combating Disinformation》
- TCP 三次握手 / 四次挥手
- 线程池 Executors2
- SAP Hybris的build callback和SAP ABAP的SGEN事务码
- SpringMVC 、Struts的区别
- leveldb登山之路——cache
- 下载--保存(下载)文件到本地(.doc .jpg)
- 大数据:技术与应用实践指南
- 黑马 Python学习笔记之第一个 Python 程序
- android加载dex方法,[原创]分享一个快速加载dex文件的方法
- 解决IE上登陆oracle OEM时报:“证书错误,导航已阻止”且无继续浏览的错误
- python 重定向 网址错_Python URL重定向问题
- 单片机——BH1750光照传感器篇
- python与人工智能:KNN近邻法识别手写数字
- 采集页面之后css布局混乱之rem适配布局
- Charles安装及使用教程
- java后端和web_从java和web角度分析前端好还是后端好
- 编程计算1!+2!+3!+…+N!