2017-08-21 20 views
5

मैं यह समझने की कोशिश कर रहा हूं कि impl ब्लॉक में परिभाषित कार्यों के लिए वास्तव में दायरा क्या है, लेकिन पैरामीटर के रूप में &self स्वीकार नहीं करता है। उदाहरण के लिए, कोड संकलित का निम्न हिस्सा क्यों नहीं संकलित करता है? मुझे त्रुटि मिलती है "इस दायरे में फ़ंक्शन generate_a_result नहीं मिल सका"।संरचना-स्वामित्व वाले कार्यों के लिए जंग स्कॉइंग नियम

pub struct Blob { 
    num: u32, 
} 

impl Blob { 
    pub fn new() -> Blob { 
     generate_a_result() 
    } 

    fn generate_a_result() -> Blob { 
     let result = Blob { 
      num: 0 
     }; 

     result 
    } 
} 

उत्तर

6

इन कार्यों जुड़े कार्यों कहा जाता है। और वे इस प्रकार के नामस्थान में रहते हैं। उन्हें हमेशा Type::function() कहा जाता है। आपके मामले में, यह Blob::generate_a_result() है। लेकिन अपने स्वयं के प्रकार का जिक्र करने के लिए, विशेष कीवर्ड Self है। तो सबसे अच्छा समाधान है:

Self::generate_a_result() 
संबंधित मुद्दे