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.