Avatar ·

ما هو trait object في Rust وكيفية إنشائه؟

مرحباً بالجميع! أنا أتعلم Rust مؤخراً وأحاول فهم الـ traits. قرأت التوثيق، لكن مفهوم "trait object" لا يزال غامضاً بالنسبة لي.\n\nلدي trait بسيط:\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\nأريد إنشاء vector يخزن حيوانات مختلفة — Dog و Cat. لكن عندما أكتب `Vec`، يشتكي المترجم أن Animal هو trait وليس نوعاً. في الإنترنت ينصحون باستخدام `Box`، لكنني لا أفهم ما هو هذا `dyn` ولماذا لا يمكن الاستغناء عنه.\n\nأرجو شرح:\n1. ما هو trait object بكلمات بسيطة؟\n2. كيف يعمل تحت الغطاء؟