typestar

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

  1. Item es el tipo asociado que produce cada paso.
  2. next devuelve None cuando la secuencia termina.
  3. map, take y collect vienen gratis con eso.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Despacho dinámico; paso 18 de 19 en Traits y genéricos.

← Anterior Siguiente →