Iterator
'Iterator' trait 支持迭代集合中的值。它需要用到 next
方法,并提供很多方法。许多标准库类型均能实现 Iterator
,您也可以自行实现:
struct Fibonacci { curr: u32, next: u32, } impl Iterator for Fibonacci { type Item = u32; fn next(&mut self) -> Option<Self::Item> { let new_next = self.curr + self.next; self.curr = self.next; self.next = new_next; Some(self.curr) } } fn main() { let fib = Fibonacci { curr: 0, next: 1 }; for (i, n) in fib.enumerate().take(5) { println!("fib({i}): {n}"); } }
This slide should take about 5 minutes.
-
The
Iterator
trait implements many common functional programming operations over collections (e.g.map
,filter
,reduce
, etc). This is the trait where you can find all the documentation about them. In Rust these functions should produce the code as efficient as equivalent imperative implementations. -
IntoIterator
是迫使 for 循环运作的特征。此特征由集合类型 (例如Vec<T>
)和相关引用(例如&Vec<T>
和&[T]
)而实现。此外,范围也会实现这项特征。因此, 您可以使用for i in some_vec { .. }
来遍历某矢量,但some_vec.next()
不存在。