Avatar ·

O que é um trait object em Rust e como criá-lo?

Olá a todos! Estou aprendendo Rust recentemente e tentando entender traits. Li a documentação, mas o conceito de "trait object" ainda é nebuloso para mim. \n\nAqui está um trait simples que tenho:\n\n```rust\ntrait Animal {\n fn speak(&self);\n}\n\nstruct Dog;\nimpl Animal for Dog {\n fn speak(&self) {\n println!(\"Woof!\");\n }\n}\n\nstruct Cat;\nimpl Animal for Cat {\n fn speak(&self) {\n println!(\"Meow!\");\n }\n}\n```\n\nQuero fazer um vetor que armazena diferentes animais — Dog e Cat. Mas se escrevo `Vec`, o compilador reclama que Animal é um trait, não um tipo. Na internet, recomendam usar `Box`, mas não entendo o que é esse `dyn` e por que não pode ser sem ele. \n\nExpliquem, por favor:\n1. O que é um trait object em palavras simples?\n2. Como ele funciona por baixo dos panos?\n3. Por que preciso escrever `dyn` e o que ele significa?\n4. Quais são as limitações dos trait objects?\n\nObrigado!\n<<>>\n

O que é um trait object?

\n

Um trait object (objeto-trait) é uma maneira de