Traits
Rust te permite abstraer sobre tipos con traits. Son similares a las interfaces:
struct Dog { name: String, age: i8, } struct Cat { lives: i8, } trait Pet { fn talk(&self) -> String; fn greet(&self) { println!("¡Eres una monada! ¿Cómo te llamas? {}", self.talk()); } } impl Pet for Dog { fn talk(&self) -> String { format!("¡Guau, me llamo {}!", self.name) } } impl Pet for Cat { fn talk(&self) -> String { String::from("¡Miau!") } } fn main() { let captain_floof = Cat { lives: 9 }; let fido = Dog { name: String::from("Fido"), age: 5 }; captain_floof.greet(); fido.greet(); }
This slide should take about 10 minutes.
-
Un trait define una serie de métodos que los tipos deben tener para implementar el trait.
-
Los traits se implementan en un bloque
impl <trait> for <type> { .. }
. -
Traits may specify pre-implemented (provided) methods and methods that users are required to implement themselves. Provided methods can rely on required methods. In this case,
greet
is provided, and relies ontalk
.