Rust में इडियोमैटिक कॉलबैक (callbacks): फंक्शन कैसे पास करें और borrow checker से कैसे बचें?
सभी को नमस्ते! मैं लगभग एक महीने से Rust में लिख रहा हूँ, JavaScript से आया हूँ, और मुझे कॉलबैक लागू करने में समस्या आ रही है। 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
```
सही तरीके से कैसे व्यवस्थित करें?