关联类型 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, }
impl Counter { fn new() -> Counter { Counter { count: 0 } } }
impl Iterator for Counter { type Item = u32;
fn next(&mut self) -> Option<Self::Item> { if self.count < 1000 { self.count += 1; Some(self.count) } else { None } } }
fn main() { let mut count = Counter::new(); loop { match count.next() { Some(i) => { println!("{}", i); if i == 1000 { break; } }, None => {println!("None")} } } }
|