Pereza, peekable y scan en Rust
Los adaptadores no hacen nada hasta que algo tira de ellos — por eso mirar y escanear sale barato.
fn main() {
let mut it = [1, 2, 3].iter().peekable();
while let Some(n) = it.next() {
if let Some(next) = it.peek() {
println!("{n} then {next}");
} else {
println!("{n} is last");
}
}
let running: Vec<i32> = [5, 10, 20]
.iter()
.scan(0, |total, n| {
*total += n;
Some(*total)
})
.collect();
println!("{:?}", running);
}
Cómo funciona
- Nada corre hasta que un método terminal pide valores.
peekablemira el siguiente elemento sin consumirlo.scanacarrea estado, emitiendo un valor por paso.
Palabras clave y builtins usados aquí
SomeVecelsefni32ifletmutwhile
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 321
- Tokens
- 128
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 77 segundos.
Paso 3 de 3 en Closures y fold; paso 8 de 14 en Iteradores y closures.