Avatar ·

متى تستخدم الأنواع المرتبطة ومتى تستخدم المعاملات العامة (ジェネリクス) في Rust؟

مرحبًا! بدأت مؤخرًا في تعلم Rust ولا أستطيع فهم مفهوم واحد. أفهم أن هناك traits مع أنواع مرتبطة (associated types) و traits مع معاملات عامة (generic type parameters). إليك الأمثلة: ```rust // النوع المرتبط trait Container { type Item; fn get(&self) -> Self::Item; } // النوع العام trait Container { fn get(&self) -> T; } ``` للوهلة الأولى، يفعلان نفس الشيء تقريبًا. لكنني قرأت أن الاختيار بينهما هو قرار معماري مهم. عندما أكتب أي trait، لا أفهم ماذا أختار. على سبيل المثال، حاولت إنشاء trait لتحويل نوع إلى آخر — استخدمت معاملًا عامًا. ثم لـ trait "مجموعة" — استخدمت نوعًا مرتبطًا. لكن لماذا؟ يبدو لي أنه إذا استخدمت معاملًا عامًا، يمكنني عمل عدة تطبيقات لنفس النوع، بينما مع النوع المرتبط — تطبيق واحد فقط. هل يعني هذا أن المعاملات العامة دائمًا أفضل؟ أم هناك حالات يكون فيها النوع المرتبط أفضل؟