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
Iterator
implementa 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çosfor
funcionarem. 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.