इस कोड में विफल रहता है संकलन त्रुटि के साथ let c = a;
में अपेक्षा के अनुरूप "चले गए मूल्य के उपयोग: a
":परिवर्तनीय बाध्यकारी: एक और म्यूट या स्थानांतरण को उधार लेना?
fn main() {
let a: &mut i32 = &mut 0;
let b = a;
let c = a;
}
एक ख में चले गए और ग के लिए असाइनमेंट को अब उपलब्ध नहीं है है। अब तक सब ठीक है.
हालांकि, अगर मैं सिर्फ b
के प्रकार व्याख्या और सब कुछ किसी और अकेला छोड़ दो:
fn main() {
let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
let c = a;
}
कोड let c = a;
में फिर से विफल रहता है लेकिन एक बहुत अलग त्रुटि संदेश के साथ इस बार: "स्थानांतरित नहीं कर सकते a
क्योंकि यह उधार लिया जाता है से बाहर ... *a
की उधार यहां होती है: let b: &mut i32 = a;
"
तो, अगर मैं सिर्फ व्याख्या b
के प्रकार: n o a
b
में स्थानांतरित करें, लेकिन इसके बजाय *a
का "पुनः" -बोरो?
मुझे क्या याद आ रही है?
चीयर्स। b
में a
का कोई चाल, लेकिन बजाय एक *a
की -borrow "फिर":
उत्तर के लिए Thx Levans। वास्तव में यह सत्यापित करने के लिए कि वास्तव में '* ए' का उधार लिया गया था, मैंने सबस्कॉप संस्करण को चेक किया था। आखिरकार, एक झूठा संकलक संदेश हो सकता था। आपके अनुमान के संबंध में, अगर मैं टाइप एनोटेशन का उपयोग करता हूं तो मुझे बहुत असहज महसूस होता है, मुझे स्पष्ट अर्थ के कुछ अजीब पुनः लिखने के लिए तैयार रहना होगा: 'ए = बी;' हमेशा एक चाल या प्रतिलिपि होना चाहिए, प्रकार एनोटेटेड या नहीं। – dacker
@ डैकर अच्छी तरह से, ध्यान रखें कि यह व्यवहार * केवल * 'और mut 'संदर्भों के साथ पहुंचा जा सकता है, इस मामले में पुन: उधार केवल एक प्रति है जो उधार नियमों का सम्मान करता है। – Levans
लेकिन क्या मैंने उन सभी दस्तावेज़ों में एक बड़ा मुद्दा नहीं देखा है जिन्हें मैंने अभी तक पढ़ा है: और इन मामलों में हमेशा म्यूटियां चली जाती हैं? एनबी: ऊपर जैसा ही व्यवहार एनोटेटेड और मट्स टाइप करने के लिए असाइनमेंट के साथ होता है। – dacker