Implementación de Traits
trait Pet { fn talk(&self) -> String; fn greet(&self) { println!("¡Eres una monada! ¿Cómo te llamas? {}", self.talk()); } } struct Dog { name: String, age: i8, } impl Pet for Dog { fn talk(&self) -> String { format!("¡Guau, me llamo {}!", self.name) } } fn main() { let fido = Dog { name: String::from("Fido"), age: 5 }; fido.greet(); }
-
Para implementar
Traitpara un tipoType, utiliza un bloqueimpl Trait for Type { .. }. -
A diferencia de los interfases de Go, tener los métodos adecuados no es suficiente: un tipo
Catcon un métodotalk()no satisfacePetautomáticamente al menos que este en un bloqueimpl Pet. -
Los traits pueden especificar implementaciones predeterminadas de algunos métodos. Implementaciones predeterminadas pueden usar todos los métodos de un trait (incluso los métodos que los usuarios deben implementar ellos mismos). En este caso,
greetes predeterminado y utilizatalk.