Devolver un iterador que presta en Rust
Un iterador sobre datos prestados ata su lifetime a la colección.
struct Tour {
steps: Vec<String>,
}
impl Tour {
fn titles(&self) -> impl Iterator<Item = &str> + '_ {
self.steps.iter().map(|s| s.as_str())
}
fn scripts(&self) -> impl Iterator<Item = &String> + '_ {
self.steps.iter().filter(|s| s.ends_with(".rs"))
}
}
fn main() {
let tour = Tour {
steps: vec!["Slices".to_string(), "shapes.rs".to_string()],
};
println!("{:?}", tour.titles().collect::<Vec<&str>>());
println!("{}", tour.scripts().count());
}
Cómo funciona
- El iterador devuelto presta
self, así queselfdebe sobrevivirlo. impl Iterator<Item = &str> + '_nombra ese préstamo.- No hay asignación de memoria: los elementos son slices del original.
Palabras clave y builtins usados aquí
IteratorStringVec_fnimplletselfstrstruct
El intento, en números
- Líneas
- 21
- Caracteres a escribir
- 446
- Tokens
- 174
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 99 segundos.
Paso 2 de 2 en Prestar sin copiar; paso 6 de 11 en Lifetimes y mutabilidad interior.