Avatar ·

¿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!