2014-11-19 10 views
39

में संरचना फ़ील्ड को कैसे परिवर्तित करें मैं विधि से संरचना फ़ील्ड को कैसे बदल सकता हूं?विधि

/src/main.rs:8:3: 8:14 error: cannot assign to immutable field `self.y` 
/src/main.rs:8    self.y += 1; 

उत्तर

53

आप &self के बजाय &mut self उपयोग करने की आवश्यकता:

struct Point { 
    x: int, 
    y: int, 
} 

impl Point { 
    fn up(&mut self) { 
     self.y += 1; 
    } 
} 

fn main() { 
    let mut p = Point { x: 0, y: 0 }; 
    p.up(); 
} 

जंग में, अस्थिरता है

मैं

struct Point { 
    x: int, 
    y: int, 
} 

impl Point { 
    fn up(&self) { 
     self.y += 1; 
    } 
} 

fn main() { 
    let p = Point { x: 0, y: 0 }; 
    p.up(); 
} 

लेकिन इस कोड फेंक संकलन त्रुटि है कि करना चाहते हैं विरासत में मिला: डेटा का मालिक यह तय करता है कि मूल्य परिवर्तनीय है या नहीं। हालांकि, संदर्भ स्वामित्व का संकेत नहीं देते हैं और इसलिए वे खुद को अपरिवर्तनीय या उत्परिवर्तनीय बना सकते हैं। आपको official book पढ़ना चाहिए जो इन सभी बुनियादी अवधारणाओं को समझाता है।

+3

कि 'पी' को म्यूटेबल उधार की अनुमति देने के लिए 'म्यूट पी' होना चाहिए। मैंने इसे ठीक करने की कोशिश की लेकिन स्टैक ओवरफ्लो संपादन चाहता है कि कम से कम 6 वर्ण हों। – Sgeo

+0

@ सेगो, धन्यवाद, इसे याद किया! –

+4

@VladimirMatveev मैं बस इतना कहना चाहता हूं कि यदि आप पुस्तक के माध्यम से पढ़ते और काम करते हैं, तब भी इन अवधारणाओं को पहले कभी नहीं देखा है, यह तब तक अधिक समझ में नहीं आता है जब तक आप वास्तविक स्थिति में नहीं जाते, जहां यह प्रासंगिक है। जैसा कि यह मेरे लिए था, इसलिए ये उत्तर अभी भी वास्तव में उपयोगी हैं;) – Aeolun