Avatar ·

ما الفرق بين iter() و into_iter() في Rust؟

مرحبًا أيها الزملاء! بدأت تعلم Rust وواجهت ارتباكًا عند العمل مع المكررات. في التوثيق، أرى أن المجموعات (مثل Vec) تحتوي على دوال iter() و into_iter(). للوهلة الأولى، يبدو أنهما يفعلان نفس الشيء — يسمحان بالتكرار على العناصر. لكنني لاحظت أنه بعد استخدام into_iter()، لم يعد المتجه الأصلي متاحًا، بينما بعد iter() يظل متاحًا. لماذا؟ إليك مثال كود يربكني: ```rust fn main() { let numbers = vec![1, 2, 3]; // استخدام iter() for num in numbers.iter() { println!("{}", num); } println!("المتجه بعد iter(): {:?}", numbers); // يعمل! // استخدام into_iter() let numbers2 = vec![4, 5, 6]; for num in numbers2.into_iter() { println!("{}", num); } // println!("المتجه بعد into_iter(): {:?}", numbers2); // خطأ! تم نقل numbers2 } ``` أفهم أن into_iter() 'يأخذ' الملكية بطريقة ما، بينما iter() لا يفعل. لكن متى نستخدم أي دالة؟ وإذا