trait Animal {
fn get_nom(&self) -> String {
self.nom
}
fn get_nombre_de_pattes(&self) -> usize {
self.nombre_de_pattes
}
}
struct Chien {
nom: String,
nombre_de_pattes: usize
}
struct Chat {
nom: String,
nombre_de_pattes: usize
}
struct Oiseau {
nom: String,
nombre_de_pattes: usize
}
struct Araignee {
nom: String,
nombre_de_pattes: usize
}
impl Animal for Chien {}
impl Animal for Chat {}
impl Animal for Oiseau {}
impl Animal for Araignee {}
fn affiche_animal<T: Animal>(animal: T) {
println!("Cet animal s'appelle {} et il a {} patte(s)", animal.get_nom(),
animal.get_nombre_de_pattes());
}
let chat = Chat { nom : "Félix", nombre_de_pattes: 4};
let spider = Araignee { nom : "Yuuuurk", nombre_de_pattes: 8};
affiche_animal(chat);
affiche_animal(spider);
Unfortunately, this code doesn't works because the compiler doesn't know, for the trait Animal with function get_nom, if the self 'object' has a field named 'nom'...