Como obter uma referência a um tipo concreto a partir de um trait object em Rust?
Olá a todos! Sou novo em Rust e encontrei um problema ao trabalhar com trait objects. Eu tenho um trait `Animal` e duas structs que o implementam: `Dog` e `Cat`. Eu as armazeno em um vetor como `Box`, mas depois preciso acessar campos específicos de cada tipo.
Aqui está o código simplificado:
```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 }),
];
for animal in animals {
animal.speak(); // Isso funciona
// Mas como obtenho breed de Dog ou lives_left de Cat?
}
}
```