Rust में क्लोजर कब Fn, FnMut और FnOnce ट्रेट्स को इम्प्लीमेंट करता है?
नमस्ते साथियों! मैंने Rust सीखना शुरू किया है और क्लोजर को समझ नहीं पा रहा हूँ। डॉक्यूमेंटेशन में लिखा है कि हर क्लोजर ऑटोमैटिकली एक या अधिक ट्रेट्स: `Fn`, `FnMut` और `FnOnce` को इम्प्लीमेंट करता है। लेकिन मैं समझ नहीं पा रहा कि यह किस पर निर्भर करता है।
मान लीजिए, मेरे पास एक सरल कोड है:
```rust
let mut x = 5;
let add_to_x = |y| x += y; // क्लोजर जो x को म्यूटेट करता है
let print_x = || println!("{}", x); // क्लोजर जो x को पढ़ता है
```
`add_to_x` को `Fn` के रूप में क्यों उपयोग नहीं किया जा सकता, जबकि `print_x` को किया जा सकता है? और क्लोजर कब `FnOnce` बनता है? मैंने अलग-अलग ट्रेट बाउंड्स वाले फंक्शन्स में क्लोजर पास करने की कोशिश की, और कंपाइलर एरर देता है कि ट्रेट इम्प्लीमेंट नहीं है।
क्या आप सरल भाषा में समझा सकते हैं कि Rust कंपाइलर कैसे तय करता है कि क्लोजर के लिए कौन सा ट्रेट इम्प्लीमेंट करना है? और इसका इस पर क्या प्रभाव पड़ता है कि क्लोजर को कई बार कॉल किया जा सकता है या केवल एक बार? मैं वेरिएबल कैप्चर के विभिन्न परिदृश्यों के साथ उदाहरणों के लिए आभारी रहूंगा। मैं इसे समझना चाहता हूँ, क्योंकि इसके बिना मैं यह नहीं समझ सकता कि कैसे...