Implementar Iterator en Rust
Un método next y todos los adaptadores de la biblioteca estándar funcionan en tu tipo.
struct Fib {
a: u64,
b: u64,
}
impl Iterator for Fib {
type Item = u64;
fn next(&mut self) -> Option<u64> {
let current = self.a;
self.a = self.b;
self.b = current + self.b;
Some(current)
}
}
fn main() {
let fib = Fib { a: 0, b: 1 };
let first: Vec<u64> = fib.take(8).collect();
println!("{:?}", first);
let even_sum: u64 = Fib { a: 0, b: 1 }
.take_while(|n| *n < 100)
.filter(|n| n % 2 == 0)
.sum();
println!("{even_sum}");
}
Cómo funciona
Itemes el tipo asociado que produce cada paso.nextdevuelveNonecuando la secuencia termina.map,takeycollectvienen gratis con eso.
Palabras clave y builtins usados aquí
IteratorOptionSomeVecfnforimplletmutselfstructtypeu64
El intento, en números
- Líneas
- 27
- Caracteres a escribir
- 430
- Tokens
- 165
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 90 segundos.
Paso 3 de 3 en Despacho dinámico; paso 18 de 19 en Traits y genéricos.