Avatar ·

println! रस्ट में वेरिएबल को उधार लेता है या स्वामित्व लेता है?

सभी को नमस्ते! मैंने अभी Rust सीखना शुरू किया है और स्वामित्व प्रणाली को समझने की कोशिश कर रहा हूँ। मेरे पास एक सरल कोड है:\n\n```rust\nfn main() {\n let s = String::from("Hello");\n println!("{}", s);\n println!("{}", s); // दूसरा प्रिंट प्रयास\n}\n```\n\nमुझे उम्मीद थी कि पहले `println!` के बाद वेरिएबल `s` मैक्रो के अंदर मूव हो जाएगा और अमान्य हो जाएगा, जैसा कि फंक्शन में पास करने पर होता है जो `String` को वैल्यू द्वारा लेता है। लेकिन कोड काम करता है! क्यों?\n\nमैंने पढ़ा है कि `println!` एक मैक्रो है, फंक्शन नहीं। शायद यह अलग व्यवहार करता है? अगर मैं लिखता:\n\n```rust\nfn print_string(s: String) {\n println!("{}", s);\n}\n\nfn main() {\n let s = String::from("Hello");\n print_string(s);\n print_string(s); // त्रुटि: use of moved value\n}\n```\n\n— तो