ما الفرق بين 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()`، لكنني لم أتعامل معها بعد. سأكون ممتنًا لشرح مفصل.