2016-12-28 24 views
9

मैं जंग में एक अपरिवर्तनीय वेक्टर में एक परिवर्तनीय वेक्टर को बदलने की कोशिश कर रहा हूं। मुझे लगा कि यह काम करेगा, लेकिन यह नहीं है:जंग जंग परिवर्तनीय संदर्भ कैसे अपरिवर्तनीय बनाने के लिए?

let data = &mut vec![]; 
let x = data;   // I thought x would now be an immutable reference 

मैं एक अपरिवर्तनीय बंधन में एक परिवर्तनशील संदर्भ बदल सकते हैं?

उत्तर

8

भिन्नता तो फिर से संदर्भ मूल्य:

fn main() { 
    let data = &mut vec![1, 2, 3]; 
    let x = &*data; 
} 

के लिए क्या अपने कोड क्या कर रहा था, तो आप शायद What's the difference in `mut` before a variable name and after the `:`? पढ़ना चाहिए। आपका चर data पहले से ही अपरिवर्तनीय है, लेकिन इसमें एक परिवर्तनीय संदर्भ है। आप data फिर से असाइन नहीं कर सकते हैं, लेकिन आप बिंदु-मूल्य को बदल सकते हैं।

मैं एक अपरिवर्तनीय बाध्यकारी में एक परिवर्तनीय संदर्भ कैसे बदल सकता हूं?

यह पहले से ही , अपरिवर्तनीय बाध्यकारी है आप बदल नहीं सकते के रूप में क्या data है।

+0

हम्म यह कोड एक फ़ंक्शन में है जो 'Vec ' देता है। यदि मैं '& * डेटा 'वापस करता हूं तो मुझे एक त्रुटि' अपेक्षित संरचना 'std :: vec :: Vec', संदर्भ मिला' मिलता है। यदि मैं '* डेटा * वापस करता हूं तो मुझे एक त्रुटि मिलती है जो उधारित सामग्री से बाहर नहीं जा सकती है। उधार चेकर के बारे में कुछ और है? जिस तरह से मैंने इसका समाधान किया है, वह 'data.clone() 'वापस लौटना है, लेकिन मैं इसे और अधिक प्रदर्शन करने की कोशिश कर रहा था, लेकिन मुझे लगता है कि मैं उधारकर्ता चेकर को अनुमति नहीं दे सकता क्योंकि मैं फ़ंक्शन में वेक्टर बना रहा हूं। हो सकता है कि मैंने अपने प्रश्न को गलत बताया, लेकिन मैं 'डेटा' से 'Vec ' कैसे प्राप्त कर सकता हूं? – jbrown

+0

@jbrown लगता है जैसे आप कह रहे हैं कि आप चाहते हैं कि 'म्यूट डेटा = vec! [1, 2, 3]; वापसी डेटा; '। – Shepmaster

+0

हां, यही वह है जिसे मैं ढूंढ रहा था। धन्यवाद। मैं उत्परिवर्तन के बारे में जंग के दस्तावेज़ों को फिर से पढ़ूंगा – jbrown