استدعاءات (callbacks) اصطلاحية في Rust: كيفية تمرير دالة وتجنب borrow checker؟
مرحبًا بالجميع! أكتب بلغة Rust منذ شهر تقريبًا، انتقلت من JavaScript، وواجهت مشكلة في تنفيذ الاستدعاءات (callbacks). في JS اعتدت ببساطة تمرير دالة كوسيط: `doSomething(callback)`. في Rust أحاول فعل نفس الشيء، لكني أحصل على أخطاء من borrow checker.
إليك الكود الخاص بي:
```rust
struct Processor {
callback: fn(i32) -> i32,
}
impl Processor {
fn new(cb: fn(i32) -> i32) -> Self {
Processor { callback: cb }
}
fn process(&self, x: i32) -> i32 {
(self.callback)(x)
}
}
fn double(x: i32) -> i32 { x * 2 }
fn main() {
let proc = Processor::new(double);
println!("{}", proc.process(5)); // 10
}
```
هذا يعمل، لكن فقط للدوال العادية. إذا أردت تمرير closure يلتقط متغيرات من البيئة، يشتكي المترجم:
```rust
let multiplier = 3;
let proc = Processor::new(|x| x * multiplier);
// error[E0277]: expected a `fn` pointer, found closure
```
كيف يمكن تنظيم