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>;
}如果是一样的话,为什么要这样宣布呢?如果不一样,那有什么区别?
发布于 2016-03-29 14:15:49
TL;DR:type Item; in Iterator是一种关联类型。
锈病泛型有输入和输出两种类型:
trait X<T, U>有T和U作为输入类型)加上Self (正在实现该特性的具体类型)。type X;在特征定义中指定的类型。引入关联项的RFC是RFC 195:相关项目。具体来说,它的动机部分引用了拥有相关性状的好处。
对我来说,最重要的一点是unicity:为该特性的任何给定实现定义一个类型,例如,它允许为Deref或Index特征提供干净的电源。在一个Deref或Index可能产生许多可能类型的世界中,类型推断将更加复杂。
https://stackoverflow.com/questions/36286630
复制相似问题