ما الفرق بين 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() لا يفعل. لكن متى نستخدم أي دالة؟ وإذا