迭代器是一种构造,它提供了一种高效访问集合类型元素的方法,不过它并不是一个新的概念。在许多命令式语言中,它们为从集合类型(例如 listmap)构造的对象。例如,Pythonitersome_list)或者 C++vector.begin() 是从现有集合构造迭代器的方法。迭代器的一个优点是它们提供了对集合中元素的高级别抽象,而不是使用手动循环,因为后者很容易因为某个错误而终止执行。

    迭代器的另一个优点它是不会在内存中读取整个集合,并且是惰性的。惰性表示迭代器仅在需要时对集合中的元素进行求值或访问。迭代器还可以与多个转换操作链接,例如根据相关条件过滤元素,并且在你需要之前不进行求值转换。当你需要访问这些元素时,迭代器会提供 next()方法,该方法尝试从集合中读取下一个元素,这一操作会在迭代器进行链式计算求值时发生。

    :::info 注意

    只有在类型具有集合(语义)时,才有必要实现 Iterator 特征。例如,对于()单位类型实现 Iterator 特征是无意 义的。

    :::

    在 Rust 中,迭代器是实现了 Iterator 特征的任意类型。可以在 for 循环中使用迭代器来 遍历其元素。它们是为大多数标准库集合类型实现的,例如 vectorHashMapBTreeMap 等,并且还可以为自定义类型实现。

    我们在 Rust 中处理集合类型时,经常会用到迭代器。事实上,Rust 的 for 循环可以转 换成一个普通的 match 表达式,其中包含对迭代器对象 next()方法的调用。此外,我们可以 通过调用其中的 iter()或者 into_iter()方法将大多数集合类型转换为迭代器。