的Iterator性状的定义如下:
pub trait Iterator {
type Item;
fn next(&mut self) -> Option<Self::Item>;
}
Run Code Online (Sandbox Code Playgroud)
什么type Item;意思?以及如何称呼它?
上面的定义等价于这个定义吗?
pub trait Iterator<T> {
fn next(&mut self) -> Option<T>;
}
Run Code Online (Sandbox Code Playgroud)
如果是一样的,为什么要那样声明呢?如果不一样,那么有什么区别呢?
TL;DR:type Item;inIterator是关联类型。
Rust 泛型有输入和输出类型:
trait X<T, U>hasT和Uas input types)加上Self(正在实现 trait 的具体类型)type X;引入关联项目的RFC是RFC 195: Associated Items。具体来说,它的动机部分引用了具有相关特征的好处。
对我来说,最重要的一点是unicity:为 trait 的任何给定实现定义了一个单一类型,例如,它允许干净地为Derefor Indextrait 提供动力。在一个Deref或Index可能产生许多可能类型的世界中,类型推断会更加复杂。
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |