किताब में लिखा पाश के लिए v1_iter के स्वामित्व लिया और पर्दे के पीछे परिवर्तनशील बनाया,
वास्तव में, और एक एक भी सरल उदाहरण बना सकते हैं:
let v = vec![1,2,3];
let mut x = v;
x.push(0);
ध्यान दें कि v
और x
अलग परिवर्तनीय बाइंडिंग हैं: जब तक वेरिएबल v
हमारे 3-तत्व वेक्टर को बनाए रखते हैं, तो चर का अनुबंध यह था कि वेक्टर को उत्परिवर्तित नहीं किया जाएगा। हालांकि, वेक्टर x
पर ले जाया गया था, जो घोषणा करता है कि उत्परिवर्तन स्वीकार्य है। एक ही समारोह कॉल करने के लिए लागू होता है:
fn foo(mut x: Vec<i32>) {
x.push(0);
}
let v = vec![1,2,3];
foo(v);
यह सुरक्षित है, क्योंकि चर का केवल एक ही अपने जीवनकाल के किसी भी बिंदु पर वेक्टर का मालिक है। एक बार v
को x
पर ले जाया गया, v
अब और उपयोग नहीं किया जा सकता है। इसी तरह, आपके कोड में, v1_iter
का उपयोग लूप के बाद अब नहीं किया जा सकता है।
लेकिन क्या आप एक अपरिवर्तनीय परिवर्तनीय को परिवर्तनीय रूपांतरित कर सकते हैं?
दोनों स्निपेट काम करते हैं क्योंकि मान mut
के रूप में घोषित एक नए चर में स्थानांतरित किया गया था। हालांकि, एक बार एक चर को अपरिवर्तनीय (या परिवर्तनीय) के रूप में घोषित किया जाता है, तो वह चर अपने पूरे जीवनकाल के लिए रहता है, और इसे बदला नहीं जा सकता है। तो जवाब नहीं है, लेकिन स्वामित्व अर्थशास्त्र विभिन्न परिवर्तनशीलता गारंटी के साथ चरों में चलती मानों को सक्षम बनाता है।
स्रोत
2017-12-11 19:46:15