typestar

impl Trait en Rust

Tipos anónimos en las firmas: cualquier argumento que encaje, cualquier retorno que cumpla.

fn total(values: impl IntoIterator<Item = i32>) -> i32 {
    values.into_iter().sum()
}

fn evens(limit: i32) -> impl Iterator<Item = i32> {
    (0..limit).filter(|n| n % 2 == 0)
}

fn adder(step: i32) -> impl Fn(i32) -> i32 {
    move |n| n + step
}

fn main() {
    println!("{}", total(vec![1, 2, 3]));
    println!("{:?}", evens(10).collect::<Vec<i32>>());
    let add_five = adder(5);
    println!("{}", add_five(37));
}

Cómo funciona

  1. En posición de argumento es la forma corta de un bound.
  2. En posición de retorno esconde el tipo concreto.
  3. Así se devuelven closures e iteradores.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
397
Tokens
154
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 88 segundos.

Escribe este fragmento

Paso 4 de 4 en Genéricos; paso 7 de 19 en Traits y genéricos.

← Anterior Siguiente →