मुख्य सामग्री पर जाएं
मॉड्यूल 4 · पाठ 2 का 2पाठ्यक्रम में 8/14~12 min
मॉड्यूल पाठ (2/2)

तरीके और निहितार्थ ब्लॉक

रस्ट में, विधियाँ फ़ंक्शंस के समान होती हैं, लेकिन उन्हें एक संरचना (या एक एनम या विशेषता) के संदर्भ में परिभाषित किया जाता है, और उनका पहला पैरामीटर हमेशा self होता है, जो उस संरचना के उदाहरण का प्रतिनिधित्व करता है जिस पर विधि को बुलाया जा रहा है।

निहितार्थ के साथ तरीकों को परिभाषित करना

किसी संरचना पर विधियों को परिभाषित करने के लिए, हम संरचना के नाम के साथ impl (कार्यान्वयन) ब्लॉक का उपयोग करते हैं:

Rust
struct Rectangle {
    width: u32,
    height: u32,
}

impl Rectangle {
    // This is an instance method. It takes &self for reading.
    fn area(&self) -> u32 {
        self.width * self.height
    }
}

fn main() {
    let rect = Rectangle { width: 30, height: 50 };

    // Call the method using dot notation
    println!("The area is: {}", rect.area());
}

संबद्ध (स्थैतिक) कार्य

impl ब्लॉक के भीतर परिभाषित फ़ंक्शन जो self को अपने पहले पैरामीटर के रूप में स्वीकार नहीं करते हैं, उन्हें संबद्ध फ़ंक्शन कहा जाता है (अन्य भाषाओं में स्थिर तरीकों के बराबर)।

इन्हें अक्सर संरचना के नए उदाहरण वापस करने के लिए कंस्ट्रक्टर के रूप में उपयोग किया जाता है। उन्हें कॉल करने के लिए, डबल कोलन :: सिंटैक्स का उपयोग करें:

Rust
impl Rectangle {
    // Associated function
    fn square(size: u32) -> Rectangle {
        Rectangle {
            width: size,
            height: size,
        }
    }
}

fn main() {
    // Call the associated function
    let sq = Rectangle::square(10);
}

स्थिति को संशोधित करने वाली विधियाँ: &mut self

यदि किसी विधि को संरचना के फ़ील्ड को संशोधित करने की आवश्यकता है, तो उसे अपना पहला पैरामीटर &mut self घोषित करना होगा। जिस उदाहरण पर विधि को कॉल किया जाता है उसे परिवर्तनशील घोषित किया जाना चाहिए (let mut):

Rust
impl Rectangle {
    fn double_size(&mut self) {
        self.width *= 2;
        self.height *= 2;
    }
}

खुद कोशिश करना

व्यायाम#rust.m4.l2.e1
प्रयास: 0लोड हो रहा है...

क्षेत्र विधि को परिभाषित करके इम्प्लांट ब्लॉक को पूरा करें जो &self लेता है और u32 (चौड़ाई और ऊंचाई का गुणन) लौटाता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`fn एरिया(&self) -> u32 { self.width \* self.height }``impl Rectangel` ब्लॉक के अंदर लिखें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#rust.m4.l2.e2
प्रयास: 0लोड हो रहा है...

इम्प्लांट रेक्टेंगल के अंदर वर्ग से संबंधित फ़ंक्शन को परिभाषित करें, जो आकार प्राप्त करता है: u32 और आकार के बराबर चौड़ाई और ऊंचाई के साथ एक रेक्टेंगल उदाहरण लौटाता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

`एफएन वर्ग (आकार: u32) -> आयत {आयत {चौड़ाई: आकार, ऊंचाई: आकार } }``impl` ब्लॉक के अंदर लिखें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#rust.m4.l2.e3
प्रयास: 0लोड हो रहा है...

इम्प्लांट ब्लॉक के अंदर रेक्टेंगल में स्केल म्यूटेटर विधि जोड़ें। स्केल विधि को स्वयं (&mut self) और एक कारक: u32 पैरामीटर के लिए एक परिवर्तनीय संदर्भ लेना चाहिए, और आयत की चौड़ाई और ऊंचाई दोनों को कारक से गुणा करना चाहिए।

संपादक लोड हो रहा है...
संकेत दिखाएँ

'स्वयं.चौड़ाई' और 'स्वयं.ऊंचाई' को 'कारक' से गुणा करके अद्यतन करने के लिए 'एफएन स्केल(&म्यूट सेल्फ, फैक्टर: यू32)' को लागू करें।

3 प्रयासों के बाद समाधान उपलब्ध है