Avatar ·

Wie erhalte ich einen Verweis auf einen bestimmten Typ aus einem Trait-Objekt in Rust?

Hallo zusammen! Ich bin neu in Rust und habe ein Problem bei der Arbeit mit Trait-Objekten. Ich habe ein Trait `Animal` und zwei Strukturen, die es implementieren: `Dog` und `Cat`. Ich speichere sie in einem Vektor als `Box`, aber später muss ich auf feldspezifische Eigenschaften jedes Typs zugreifen. Hier ist der vereinfachte Code: ```rust trait Animal { fn speak(&self); } struct Dog { name: String, breed: String, } struct Cat { name: String, lives_left: u8, } impl Animal for Dog { fn speak(&self) { println!("Woof!"); } } impl Animal for Cat { fn speak(&self) { println!("Meow!"); } } fn main() { let animals: Vec> = vec![ Box::new(Dog { name: "Rex".into(), breed: "Labrador".into() }), Box::new(Cat { name: "Whiskers".into(), lives_left: 9 }), ]; // Wie bekomme ich hier einen Verweis auf den konkreten Typ? for animal in &animals { // animal.speak() funktioniert, aber wie greife ich auf // Dog.breed oder Cat.lives_left zu? } } ``` Ich habe über `Any` und Downcasting gelesen, bin mir aber nicht sicher, ob das der richtige Ansatz ist. Gibt es eine idiomatischere Methode, dies in Rust zu handhaben? Vielleicht mit einem Enum oder einem anderen Pattern? Ich möchte vermeiden, für jeden Typ separate Vektoren zu erstellen.