typestar

Funciones genéricas y bounds en Rust

Un parámetro de tipo con bounds: una función, todos los tipos que satisfacen el trait.

fn biggest<T: PartialOrd + Copy>(values: &[T]) -> T {
    let mut best = values[0];
    for v in values {
        if *v > best {
            best = *v;
        }
    }
    best
}

fn describe<T>(value: T) -> String
where
    T: std::fmt::Debug + Clone,
{
    format!("{:?}", value.clone())
}

fn main() {
    println!("{}", biggest(&[3, 9, 2]));
    println!("{}", biggest(&[1.5, 0.5]));
    println!("{}", describe(vec![1, 2]));
}

Cómo funciona

  1. <T: PartialOrd> dice que T debe ser comparable.
  2. Una cláusula where saca de la firma las listas largas de bounds.
  3. La monomorfización compila una copia por tipo concreto.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
22
Caracteres a escribir
367
Tokens
145
Ritmo de tres estrellas
105 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →