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
Trait
para 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
Cat
con un métodotalk()
no satisfacePet
automá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,
greet
es predeterminado y utilizatalk
.