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 Trait para Type, vocĂȘ usa um bloco impl Trait for Type { .. }.

  • Ao contrĂĄrio das interfaces Go, apenas ter mĂ©todos correspondentes nĂŁo Ă© suficiente: um tipo Cat com um mĂ©todo talk() nĂŁo satisfaria automaticamente Pet a menos que esteja em um bloco impl 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 de talk.