Avatar ·

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

مرحبًا! لقد بدأت للتو في تعلم Rust وأحاول فهم المكررات. قرأت عدة مقالات، لكنني لا أستطيع فهم الفرق بين طريقتي `iter()` و `into_iter()`. لقد كتبت هذا الكود: ```rust let numbers = vec![1, 2, 3, 4, 5]; // المحاولة 1: iter() for num in numbers.iter() { println!("{}", num); } println!("بعد iter(): {:?}", numbers); // يعمل // المحاولة 2: into_iter() for num in numbers.into_iter() { println!("{}", num); } println!("بعد into_iter(): {:?}", numbers); // خطأ! ``` الجزء الأول من الكود يعمل بشكل طبيعي، يمكنني استخدام `numbers` بعد الحلقة. لكن الجزء الثاني ينتج خطأ في الترجمة: `value used here after move`. لقد قرأت أن `into_iter()` تستهلك المجموعة، لكنني لا أفهم ماذا يعني هذا عمليًا. لماذا لا يمكنني استخدام المتجه بعد `into_iter()`؟ وفي أي الحالات يجب استخدام كل من هذه الطرق؟ أيضًا سمعت عن طريقة `iter_mut()`، لكنني لم أتعامل معها بعد. سأكون ممتنًا لشرح مفصل.