Rust में इडियोमैटिक कॉलबैक: फंक्शन और क्लोज़र को सही तरीके से पास करना
नमस्ते साथियों! मैं C++ के बाद Rust सीखना शुरू कर रहा हूँ और समझ नहीं पा रहा हूँ कि कॉलबैक सही तरीके से कैसे करें। C++ में मैं std::function या function pointer पास कर देता था। यहाँ ownership और lifetime के साथ सब कुछ सख्त है।
समस्या: मैं एक सरल event handler लिखना चाहता हूँ। एक Button struct है जिसे दबाने पर user-defined function कॉल होनी चाहिए। C++ में मैं ऐसे करता:
```cpp
struct Button {
std::function onClick;
void press() { if(onClick) onClick(); }
};
```
Rust में लिखने की कोशिश:
```rust
struct Button {
callback: fn(), // function pointer आज़मा रहा हूँ
}
impl Button {
fn press(&self) {
(self.callback)();
}
}
```
यह केवल सामान्य functions के लिए काम करता है, closures के लिए नहीं जो variables capture करते हैं। अगर मैं लिखूं:
```rust
let mut count = 0;
let button = Button {
callback: || { count += 1; } // error! type mismatch
};
```
Compiler error देता है: "expected fn item, found closure"। मैंने Box और Fn/FnMut के साथ generics के बारे में पढ़ा है।