Implementando Traits
trait Pet {
fn talk(&self) -> String;
fn greet(&self) {
println!("Oh, você é adorável! Qual é o seu nome? {}", self.talk());
}
}
struct Dog {
name: String,
age: i8,
}
impl Pet for Dog {
fn talk(&self) -> String {
format!("Auau, meu nome é {}", self.name)
}
}
fn main() {
let fido = Dog { name: String::from("Bidu"), age: 5 };
fido.greet();
}
-
Para implementar
TraitparaType, você usa um blocoimpl Trait for Type { .. }. -
Ao contrário das interfaces Go, apenas ter métodos correspondentes não é suficiente: um tipo
Catcom um métodotalk()não satisfaria automaticamentePeta menos que esteja em um blocoimpl Pet. -
Os traits podem fornecer implementações padrão de alguns métodos. As implementações padrão podem depender de todos os métodos do trait. Neste caso,
greeté fornecido e depende detalk.