Iterator
O trait Iterator suporta a iteração sobre valores em uma coleção. Ele requer um método next e fornece muitos métodos. Muitos tipos da biblioteca padrão implementam Iterator, e você também pode implementá-lo:
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}"); } }
-
O trait
Iteratorimplementa muitas operações comuns de programação funcional sobre coleções (por exemplo,map,filter,reduce, etc). Este é o trait onde você pode encontrar toda a documentação sobre eles. Em Rust, essas funções devem produzir o código tão eficiente quanto as implementações imperativas equivalentes. -
IntoIteratoré o trait que faz os laçosforfuncionarem. Ele é implementado por tipos de coleção comoVec<T>e referências a eles como&Vec<T>e&[T]. Intervalos (ranges) também o implementam. É por isso que você pode iterar sobre um vetor comfor i in some_vec { .. }, massome_vec.next()não existe.