Avatar ·

كيفية إرجاع مكرر (أو أي trait آخر) من دالة في Rust بشكل صحيح؟

مرحباً بالجميع! بدأت تعلم Rust وواجهت مشكلة تبدو أنها تزعج جميع المبتدئين. أريد كتابة دالة تُرجع مكرراً. على سبيل المثال، أريد إنشاء دالة تقوم بتصفية الأعداد وإرجاع الأعداد الزوجية فقط: ```rust fn get_even(numbers: Vec) -> Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` لكن المترجم يُصدر خطأ: "the trait `Iterator` cannot be made into an object". لقد قرأت عن `dyn` و `impl`، لكني لا أفهم تماماً أي خيار هو الصحيح. جربت استخدام `impl Iterator`: ```rust fn get_even(numbers: Vec) -> impl Iterator { numbers.into_iter().filter(|x| x % 2 == 0) } ``` هذا يعمل، لكني لا أستطيع فهم: متى يجب استخدام `impl Trait`، ومتى يجب استخدام `Box`؟ وماذا أفعل إذا كانت دالتي يجب أن تُرجع أنواعاً مختلفة من المكررات اعتماداً على الشروط؟ على سبيل المثال، أحياناً تصفية الأعداد الزوجية، وأحياناً الأخرى الأعداد الفردية. ساعدوني في الفهم، من فضلكم!