عندما ينفذ الإغلاق Fn وFnMut وFnOnce في Rust؟
أنا مبتدئ في Rust وأحاول فهم الإغلاقات. قرأت عن السمات Fn وFnMut وFnOnce، لكنني لا أفهم تمامًا متى يختار المترجم أيًا منها. كتبت مثالًا صغيرًا:
```rust
fn main() {
let x = 10;
let print_x = || println!("{}", x); // إغلاق 1
let mut y = String::from("hello");
let append = || y.push_str(" world"); // إغلاق 2
let z = String::from("rust");
let consume = || drop(z); // إغلاق 3
}
```
لماذا يعمل الإغلاق الأول كـ Fn، والثاني كـ FnMut، والثالث كـ FnOnce؟ وكيف يؤثر هذا على عدد المرات التي يمكنني فيها استدعاء الإغلاق؟ إذا مررت هذا الإغلاق إلى دالة، كيف أعرف أي سمة تتوقعها؟ سأكون ممتنًا لشرح مع أمثلة.
<<>>
إجابة مختصرة: كل شيء يعتمد على كيفية استخدام الإغلاق للمتغيرات الملتقطة
يحدد مترجم Rust تلقائيًا أيًا من السمات الثلاث ينفذها الإغلاق بناءً على ما يفعله بالمتغيرات الملتقطة من الخارج.