Avatar ·

Qu'est-ce qu'un trait object en Rust et comment le créer ?

Bonjour à tous ! J'apprends Rust récemment et j'essaie de comprendre les traits. J'ai lu la documentation, mais le concept de "trait object" reste flou pour moi. \n\nVoici un trait simple que j'ai :\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\nJe veux créer un vecteur qui stocke différents animaux — à la fois Dog et Cat. Mais si j'écris `Vec`, le compilateur se plaint qu'Animal est un trait, pas un type. Sur Internet, on conseille d'utiliser `Box`, mais je ne comprends pas ce qu'est ce `dyn` et pourquoi on ne peut pas s'en passer. \n\nExpliquez-moi s'il vous plaît :\n1. Qu'est-ce qu'un trait object en termes simples ?\n2. Comment fonctionne-t-il sous le capot ?