`Iterator`特征中的`type Item`是什么意思

时间:2016-03-29 14:01:58

标签: rust

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>;
}

如果它是相同的,为什么这样声明?如果它不相同那么差异是什么?

1 个答案:

答案 0 :(得分:2)

TL; DR type Item;中的Iterator关联的类型。

Rust泛型具有输入和输出类型:

  • 输入类型是特征声明中指定的类型(trait X<T, U>具有TU作为输入类型)加Self(特征的具体类型)正在实施)
  • 输出类型是通过type X;
  • 在特征定义中指定的类型

引入相关项的RFC是RFC 195: Associated Items。具体来说,它的motivation部分引用了相关特征的好处。

对我来说,最重要的一点是 unicity :为特征的任何给定实现定义了单一类型,这样可以干净地为DerefIndex特征提供动力例如。在DerefIndex可能产生许多可能类型的世界中,类型推断将更加复杂。