Avatar ·

استدعاءات (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 ``` كيف يمكن تنظيم