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

标签 rust

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>TU 作为输入类型)加上Self (正在实现特征的具体类型)
  • 输出类型是通过 type X; 在特征定义中指定的类型

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

对我来说,最重要的一点是单一性:为特征的任何给定实现定义单一类型,这允许干净地为 Deref 供电或 Index例如特质。在一个 Deref 的世界里或 Index可能产生许多可能的类型,类型推断会更加复杂。

关于rust - `type Item` 特征中的 `Iterator` 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286630/

相关文章:

rust - 在结构中使用 vec

rust - 不满足特征边界 `&' a chain::Chain <'a>: Deserialize<' _>`

vector - Rust 特征向量 : cast each trait

rust - 为什么 Rust 编译器会生成巨大的可执行文件?

rust - C 库释放来自 Rust 的指针

rust - 使用宏而不是函数会使二进制文件更大吗?

rust - 远程连接时连接到 Substrate 前端模板时出错

rust - 有没有办法强制两个参数切片具有相同的长度?

rust - Rust 中的宏和函数有什么区别?

rust - 我如何借用 RefCell<HashMap>、找到一个键并返回对结果的引用?