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
impl<T: Display> Loud for Tlos cubre a todos de una vez.- Así llega
ToStringa todo lo que tieneDisplay. - Quien llama recibe el método sin importar ninguna envoltura.
Palabras clave y builtins usados aquí
Stringfnforimplselftraituse
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.
Paso 2 de 3 en Despacho dinámico; paso 17 de 19 en Traits y genéricos.