ruby - self vs class name for class methods in inheritance -
इस कोड में:
वर्ग dog def self.bark print "woof" end end वर्ग लिटिल_डॉग & lt; कुत्ते का अंत Little_dog.bark
विधि को एक सामान्यीकृत वर्ग से विरासत में मिला है, जो संदर्भ self
है। लेकिन कोड का अगला पैच:
वर्ग डॉग डीफ डॉग.बार्क प्रिंट "वूफ" एंड एंड क्लास लिटिल_डॉग & lt; कुत्ते का अंत Little_dog.bark
भी काम करता है मुझे यह एक त्रुटि देने की उम्मीद थी, लेकिन ऐसा नहीं हुआ।
कैसे स्वयं कक्षा विरासत के तहत कक्षा विधि को संदर्भित करता है? दूसरे कोड में
little_dog
क्लास में क्लास विधि bark
क्यों होता है जब मैंने इसे केवल dog
स्वयं
व्यापक रूप से प्रयोग किया जाता है।
पुस्तक से: < / P>
रूबी कोड की हर पंक्ति किसी ऑब्जेक्ट के भीतर निष्पादित होती है- तथाकथित वर्तमान ऑब्जेक्ट। वर्तमान वस्तु को स्वयं के रूप में भी जाना जाता है, क्योंकि आप इसे स्वयं खोजशब्द के साथ उपयोग कर सकते हैं।
केवल एक ऑब्जेक्ट किसी निश्चित समय पर स्वयं की भूमिका ले सकता है, लेकिन कोई ऑब्जेक्ट लंबे समय तक भूमिका नहीं रखता है । विशेष रूप से, जब आप एक विधि कॉल करते हैं, तो रिसीवर स्वयं बन जाता है उस क्षण से, सभी आवृत्ति चर स्वयं के उदाहरण चर हैं, और स्पष्ट रिसीवर के बिना बुलाए गए सभी तरीकों को स्वयं पर कहा जाता है। जैसे ही आपका कोड स्पष्ट रूप से किसी अन्य ऑब्जेक्ट पर एक विधि को कॉल करता है, अन्य ऑब्जेक्ट स्वयं हो जाता है।
तो, कोड में:
class Dog # self कक्षा ऑब्जेक्ट का प्रतिनिधित्व करता है: कुत्ते जो कक्षा का एक उदाहरण है # `छाल` को कक्षा विधि डीएफ़ स्वयं के रूप में माना जाएगा। बार्क प्रिंट" वूफ "एंड एंड
भी लिखा जा सकता है:
class कुत्ता # कुत्ता कक्षा का एक उदाहरण है # `छाल` को कक्षा विधि डीग डॉग.बार्क प्रिंट" वूफ़ "एंड एंड
के रूप में माना जाएगा वंशानुक्रम अपने मूल वर्ग की सुविधाओं का उपयोग करने के लिए उप-कक्षा की अनुमति देता है। यही कारण है कि आप छाल
विधि Little_dog
वर्ग में प्रवेश कर सकते हैं क्योंकि यह विरासत में मिली है कुत्ते
वर्ग:
class Little_dog & LT; डॉग एंड को डॉग एंड के कारण कक्षा विधि के रूप में `छाल` दिया गया है: रूबी में इसे क्लास और मॉड्यूल नाम देने के लिए कैमलसीज़ सम्मेलन का उपयोग करने के लिए सबसे अच्छा अभ्यास माना जाता है।
Comments
Post a Comment