Avatar ·

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 के बारे में पढ़ा है।