和传统的OOP语言通过类封装数据和行为不同,Rust的类型和行为是相互区分的,不同的数据类型通过trait相互关联。
1. Generics Overview
泛型版本的sum()
如下,即参数化多态/模板:
1 |
|
1.1. 泛型的实现
通过两种实现物化泛型
1 |
|
1.2. 示例:实现Point
1 |
|
泛型版本的Point
1 |
|
2. Trait Overview
- 区分数据和行为
- Rust同时提供函数的静态/动态分发
- 能够选择是否使用虚函数表(Trait object)
2.1. 示例:Summary trait
1 |
|
2.2. 静态/动态分发
1 |
|
上述对应的汇编如下
1 |
|
虚函数表:
3. 常用的trait
3.1. formatting相关
- fmt::Debug ->
{:?}
- fmt::Display ->
{}
- fmt::Write -> formatting的低级接口
3.2. IO reader/writer
- io::Read
- io::Write
无buffer。但是能够在其上增加其他功能,例如BufReader
1 |
|
3.3. Traits和Rust语言是紧耦合的
Add
,AddAssign
,etc:+
,+=
,etcIterator
和IntoIterator
: for循环Deref
和DerefMut
:.
(dot)
3.4. From
->Into
1 |
|
3.5. Iterator和IntoIterator
1 |
|
下面给出为Point
实现迭代器的例子:
1 |
|
注:Self
(S大写)表示实现了当前trait的具体类型。方法的第一个参数的self
类型默认是self: Self
。