疊代器
您可以自行在型別上實作 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
特徵會對集合實作許多常見的函式程式操作,例如map
、filter
、reduce
等等。您可以藉由此特徵找出所有相關的說明文件。在 Rust 中,這些 函式會產生程式碼,且應與對應的命令式實作項目一樣有效率。 -
IntoIterator
是迫使 for 迴圈運作的特徵。此特徵由集合型別(例如Vec<T>
) 和相關參照 (&Vec<T>
與&[T]
) 實作而成。此外,範圍也會實作這項特徵。 這就說明了您為何可以透過for i in some_vec { .. }
對向量進行疊代,即使沒有some_vec.next()
也無妨。