Iterator
特征定义如下:
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
type Item;
是什么意思?以及如何称呼它?
上面的定义是否与此相同?
pub trait Iterator<T> {
fn next(&mut self) -> Option<T>;
}
如果它是相同的,为什么这样声明?如果它不相同那么差异是什么?
答案 0 :(得分:2)
TL; DR :type Item;
中的Iterator
是关联的类型。
Rust泛型具有输入和输出类型:
trait X<T, U>
具有T
和U
作为输入类型)加Self
(特征的具体类型)正在实施)type X;
引入相关项的RFC是RFC 195: Associated Items。具体来说,它的motivation部分引用了相关特征的好处。
对我来说,最重要的一点是 unicity :为特征的任何给定实现定义了单一类型,这样可以干净地为Deref
或Index
特征提供动力例如。在Deref
或Index
可能产生许多可能类型的世界中,类型推断将更加复杂。