2.2 `Iterator` Trait
02-
Iterator Trait — Comprehensive Rust1分钟内可阅读完
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/iterators/iterator.html
2.2 Iterator Trait
Iterator trait 定义了如何用一个对象产出一串值。例如,若我们想创建一个能产出切片元素的迭代器,大致可以写成这样:
| |
SliceIter示例实现的逻辑与上一页演示的 C 风格for循环相同。向学员强调:迭代器是惰性的(lazy)。创建迭代器只是初始化结构体,不会立刻做任何工作;直到调用
next方法才会真正开始。迭代器不必是有限的!完全可以写出永远产出值的迭代器。例如,半开区间
0..会一直产生值,直到发生整数溢出。更多探索
「真正的」
SliceIter是标准库中的slice::Iter类型;真实实现底层用指针而非下标,以消除边界检查。
SliceIter也是一个很好的例子:结构体包含引用,因此需要生命周期标注。你还可以演示给
SliceIter加上泛型参数,使其适用于任意切片(而不只是&[i32])。