Rust में क्लोज़र Fn, FnMut और FnOnce कब लागू करता है?
मैं Rust में नया हूँ और क्लोज़र को समझने की कोशिश कर रहा हूँ। मैंने Fn, FnMut और FnOnce ट्रेट्स के बारे में पढ़ा, लेकिन पूरी तरह से नहीं समझ पाया कि कंपाइलर कब कौन सा चुनता है। मैंने एक छोटा उदाहरण लिखा:
```rust
fn main() {
let x = 10;
let print_x = || println!("{}", x); // क्लोज़र 1
let mut y = String::from("hello");
let append = || y.push_str(" world"); // क्लोज़र 2
let z = String::from("rust");
let consume = || drop(z); // क्लोज़र 3
}
```
पहला क्लोज़र Fn के रूप में, दूसरा FnMut के रूप में और तीसरा FnOnce के रूप में क्यों काम करता है? और यह इस बात को कैसे प्रभावित करता है कि मैं क्लोज़र को कितनी बार कॉल कर सकता हूँ? अगर मैं ऐसे क्लोज़र को किसी फंक्शन में पास करूँ, तो मैं कैसे जानूँ कि वह किस ट्रेट की अपेक्षा करता है? कृपया उदाहरणों के साथ समझाएँ।