迭代器

您可以自行实现 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}");
    }
}
  • Iterator 特征会对集合实现许多常见的函数程序操作, 例如 mapfilter `reduce` 等。您可以通过此特征找到有关它们的所有 文档。在 Rust 中,这些函数应生成代码,且生成的代码应与等效命令式实现一样 高效。

  • IntoIterator 是迫使 for 循环运作的特征。此特征由集合类型 (例如 Vec<T>)和相关引用(例如 &Vec<T>&[T])而实现。此外,范围也会实现这项特征。因此, 您可以使用 for i in some_vec { .. } 来遍历某矢量,但 some_vec.next() 不存在。