typestar

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

  1. El iterador devuelto presta self, así que self debe sobrevivirlo.
  2. impl Iterator<Item = &str> + '_ nombra ese préstamo.
  3. No hay asignación de memoria: los elementos son slices del original.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 2 en Prestar sin copiar; paso 6 de 11 en Lifetimes y mutabilidad interior.

← Anterior Siguiente →