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— तो यह