كيفية تمرير دالة كمعامل في Rust؟
مرحباً بالجميع! لقد بدأت للتو في تعلم Rust، وواجهت مشكلة تبدو بسيطة لكنني لا أجد الحل الصحيح. أريد كتابة دالة تأخذ دالة أخرى كوسيطة لجعل الكود أكثر مرونة.
هذا ما أحاول فعله:
```rust
fn apply_twice(f: ???, x: i32) -> i32 {
f(f(x))
}
fn add_one(x: i32) -> i32 {
x + 1
}
fn main() {
let result = apply_twice(add_one, 5);
println!("{}", result); // أتوقع 7
}
```
لا أفهم أي نوع يجب تحديده للمعامل `f`. جربت `fn(i32) -> i32` لكن المترجم يشتكي. كما سمعت عن closures والـ traits `Fn` و `FnMut` و `FnOnce` — لكن ما الفرق؟ متى نستخدم كل منها؟ كيف نمرر closure يلتقط متغيرات من النطاق الخارجي؟
اشرح لي من فضلك كيفية تمرير الدوال و closures في Rust بشكل صحيح. يُفضل مع أمثلة كود. شكراً مسبقاً!
<<>>