Iterator
trait 定义如下:
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
type Item;
是什么意思?以及如何调用它?
上面的定义等同于这个吗?
pub trait Iterator<T> {
fn next(&mut self) -> Option<T>;
}
如果相同,为什么要这样声明呢?如果不一样,那有什么区别?
最佳答案
长话短说:type Item;
在Iterator
是一个关联类型。
Rust 泛型具有输入和输出类型:
- 输入类型是特征声明中指定的类型(
trait X<T, U>
有T
和U
作为输入类型)加上Self
(正在实现特征的具体类型) - 输出类型是通过
type X;
在特征定义中指定的类型
引入关联项的RFC是RFC 195: Associated Items .具体来说,它的 motivation部分引用了具有关联特征的好处。
对我来说,最重要的一点是单一性:为特征的任何给定实现定义单一类型,这允许干净地为 Deref
供电或 Index
例如特质。在一个 Deref
的世界里或 Index
可能产生许多可能的类型,类型推断会更加复杂。
关于rust - `type Item` 特征中的 `Iterator` 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286630/