syntax - When do Ruby instance variables get set? -
वर्ग हैलो @hello = "हैलो" डीईफ़ डिफ्यूटिंग @hello end end = hl.new h.display डालता है मैंने ऊपर वर्ग बनाया है यह कुछ भी प्रिंट नहीं करता है मैंने सोचा था कि आवृत्ति परिवर्तनीय @ हैल्लो को क्लास घोषणापत्र के दौरान सेट किया गया था। लेकिन जब मैं डिस्प्ले पद्धति को कॉल करता हूं, आउटपुट 'निल' है ऐसा करने का सही तरीका क्या है? रूबी में इन्स्टन्स चर एक थोड़ा भ्रामक हो सकता है जब पहले रूबी सीखना , खासकर यदि आप जावा जैसी अन्य ओ ओ भाषा के आदी हो
आप केवल एक आवृत्ति चर घोषित नहीं कर सकते हैं।
रूबी में उदाहरण चर के बारे में जानना सबसे महत्वपूर्ण चीजों में से एक, @ साइन प्रिफ़िक्स के साथ संकेतन के अलावा, यह है कि
<पूर्व> वर्ग हैलो डीआर def_some_state @hello = "हैलो" अंत अंत एच = हैलो.न्यू p h.instance_variables एच। Create_some_state p h.instance_variables # आउटपुट [] ["@hello"] आप ऑब्जेक्ट के सभी इंस्टेंस वैरिएबल्स को सूचीबद्ध करने के लिए विधि Object # instance_variables का उपयोग कर सकते हैं।
आप आमतौर पर "घोषित" और इनिशियलाइज़ विधि में सभी आवृत्ति चर को इनिशियलाइज़ करते हैं। स्पष्ट रूप से दस्तावेज करने का एक अन्य तरीका जो आवृत्ति वेरिएबल्स जो सार्वजनिक रूप से उपलब्ध होना चाहिए, उन्हें मॉड्यूल विधियों उदाहरण चर अभी भी तब तक नहीं बनाया जाता है जब तक इसे संश्लेषित एक अन्य महत्वपूर्ण मुद्दा, जैसे कि वर्णित किच, यह है कि किसी वर्ग की घोषणा करते समय आपको विभिन्न संदर्भों के बारे में जागरूक होना चाहिए। एक वर्ग की घोषणा करते समय डिफ़ॉल्ट रिसीवर (स्वयं) सबसे बाहरी गुंजाइश में वह ऑब्जेक्ट होगा जो क्लास का प्रतिनिधित्व करता है। इसलिए आपका कोड पहले क्लास स्तर पर ऐसे तरीकों पर स्वयं ऑब्जेक्ट होगा इस विधि को लागू किया जाता है, इसलिए आप एक आवृत्ति चर के नाम को attr_accessor (पढ़ना / लिखना), attr_writer (लिखें) और attr_reader < / कोड> (पढ़ें) ये विधियां सूचीबद्ध इंस्टेंस वैरिएबल के लिए विभिन्न एक्सेसर विधियों का संश्लेषित करेगा।
class हैलो attr_accessor: हैलो एंड एच = हैलो.न्यू p h.instance_variables h.hello = "हैलो" पी h.instance_variables # आउटपुट [] ["@hello"] नमस्कार # हैलो = विधि का उपयोग करने के लिए असाइन किया जाता है। @hello को असाइन करते समय एक क्लास इंस्टेंस वैरिएबल बना देगा। @hello वस्तु के साथ मुद्रित करने का प्रयास कर रहे हैं, जो मौजूद नहीं है (ध्यान दें कि यह गैर-मौजूदा उदाहरण को पढ़ने के लिए पूरी तरह से कानूनी है चर)।
Comments
Post a Comment