¿Qué es un trait object en Rust y cómo crearlo?
¡Hola a todos! Estoy aprendiendo Rust recientemente y trato de entender los traits. Leí la documentación, pero el concepto de "trait object" sigue siendo confuso para mí.
Aquí tengo un trait simple:
```rust
trait Animal {
fn speak(&self);
}
struct Dog;
impl Animal for Dog {
fn speak(&self) {
println!("Woof!");
}
}
struct Cat;
impl Animal for Cat {
fn speak(&self) {
println!("Meow!");
}
}
```
Quiero hacer un vector que almacene diferentes animales — tanto Dog como Cat. Pero si escribo `Vec`, el compilador se queja de que Animal es un trait, no un tipo. En internet recomiendan usar `Box`, pero no entiendo qué es ese `dyn` y por qué no se puede sin él.
Expliquen por favor:
1. ¿Qué es un trait object en palabras simples?
2. ¿Cómo funciona bajo el capó?
3. ¿Por qué hay que escribir `dyn` y qué significa?
4. ¿Cuáles son las limitaciones de los trait objects?
¡Gracias!