“迭代器”特征中的“type Item”是什么意思



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

如果是一样的,为什么要这样声明?如果不一样,有什么区别?

TL;DRIterator中的type Item;相关的类型。


Rust泛型既有输入类型也有输出类型:

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

引入关联项的RFC是RFC 195:关联项。具体来说,它的动机部分列举了拥有相关特质的好处。

对我来说,最重要的一点是unicity:为特性的任何给定实现定义一个类型,例如,这允许为DerefIndex特性提供干净的电源。在DerefIndex可以产生许多可能的类型的世界中,类型推理将更加复杂。

最新更新