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