关联类型 type

关联类型associated types)是一个将类型占位符与 trait 相关联的方式,这样 trait 的方法签名中就可以使用这些占位符类型。trait 的实现者会针对特定的实现在这个类型的位置指定相应的具体类型。如此可以定义一个使用多种类型的 trait,直到实现此 trait 时都无需知道这些类型具体是什么。高级 trait

官方的一个例子:

1
2
3
4
5
pub trait Iterator {
type Item;

fn next(&mut self) -> Option<Self::Item>;
}

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

struct Counter {
count: u32,
}

// 实现一个关联函数:new()
impl Counter {
fn new() -> Counter {
Counter { count: 0 }
}
}

// 实现 Iterator 中的 next 成员函数
impl Iterator for Counter {
type Item = u32; // 指定 Iterator 中的关联类型为 u32

fn next(&mut self) -> Option<Self::Item> {
if self.count < 1000 {
self.count += 1;
Some(self.count)
} else {
None
}
}
}

fn main() {
// 用 Counter 的关联函数 new() 创建一个可变对象 count
let mut count = Counter::new();
loop {
// 每循环一次都匹配调用一次 count 的 next 方法
match count.next() {
Some(i) => {
println!("{}", i);
if i == 1000
{
break;
}
},
None => {println!("None")}
}
}
}