和传统的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。