typestar

Implementaciones blanket en Rust

Implementar un trait para todo tipo que cumpla un bound — un trait de extensión.

use std::fmt::Display;

trait Loud {
    fn loud(&self) -> String;
}

impl<T: Display> Loud for T {
    fn loud(&self) -> String {
        format!("{}!!", self)
    }
}

fn main() {
    println!("{}", 42.loud());
    println!("{}", "rust".loud());
    println!("{}", 1.5.loud());
    println!("{}", 'x'.loud());
}

Cómo funciona

  1. impl<T: Display> Loud for T los cubre a todos de una vez.
  2. Así llega ToString a todo lo que tiene Display.
  3. Quien llama recibe el método sin importar ninguna envoltura.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
277
Tokens
108
Ritmo de tres estrellas
110 tpm

Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 59 segundos.

Escribe este fragmento

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

← Anterior Siguiente →