Ruby में super कीवर्ड क्या करता है?
यह उसी नाम के मेथड को पैरेंट क्लास पर कॉल करता है जो super को कॉल करने वाले मेथड का नाम है।
उदाहरण के लिए:
यदि आप i_like_chocolate नामक एक मेथड कॉल करते हैं, और फिर उस मेथड के भीतर super कॉल करते हैं, तो Ruby उस मेथड के मालिक की पैरेंट क्लास पर उसी नाम के दूसरे मेथड को खोजने का प्रयास करेगा।
यह क्लास एनसेस्ट्री चेन के माध्यम से ऊपर की ओर बुलबुला करता रहता है एक नियमित मेथड कॉल की तरह।
यदि मेथड मौजूद नहीं है तो यह एक NoMethodError अपवाद ट्रिगर करेगा, और यदि method_missing मिलता है तो यह उसका उपयोग करेगा।
अब:
आइए कुछ कोड उदाहरण देखते हैं!
आर्गुमेंट्स के बिना Super
निम्नलिखित उदाहरण में हमारे पास एक Cat क्लास है जो Animal से इनहेरिट करती है।
Cat क्लास में एक name मेथड है जो super का उपयोग करके अपने पैरेंट क्लास (Animal) पर उसी मेथड को कॉल करता है।
यहां कोड है:
class Animal def name puts "Animal" end end class Cat < Animal def name super end end cat = Cat.new cat.name # "Animal"
Ruby super कीवर्ड आर्गुमेंट्स के साथ या बिना उपयोग किए जाने पर अलग व्यवहार करता है।
आर्गुमेंट्स के बिना:
यह मूल मेथड कॉल के लिए उपयोग किए गए आर्गुमेंट्स को नए मेथड में पास कर देगा, जिसमें कीवर्ड आर्गुमेंट्स और ब्लॉक शामिल हैं यदि दिए गए हैं।
यहां एक उदाहरण है:
def puts(*) super end puts 1, 2, 3
यह मेथड, किसी क्लास के बाहर परिभाषित, Object से संबंधित होगा। इसका मतलब है कि यह मूल puts मेथड से पहले कॉल किया जाएगा।
अब:
जब आप puts कॉल करते हैं तो आप इस नए मेथड को कॉल कर रहे हैं जिसे हमने बनाया है जो तब मूल puts को कॉल करने के लिए super का उपयोग करता है।
Super बनाम Super() का उपयोग कब करें
हमने अभी देखा कि पैरेंट मेथड्स को कॉल करने के लिए super का उपयोग कैसे करें।
लेकिन क्या होगा यदि पैरेंट मेथड समान संख्या में आर्गुमेंट्स नहीं लेता?
उस स्थिति में आप उपयोग कर सकते हैं:
- कोई आर्गुमेंट नहीं के लिए
super() - आप कौन से आर्गुमेंट्स पास करना चाहते हैं उन्हें चुनने के लिए
super(arg1, arg2, ...)
उदाहरण:
def puts super() end
ध्यान दें कि पैरेंथेसिस का यहां विशेष अर्थ है, एक नियमित मेथड कॉल के विपरीत।
super के बारे में जानने योग्य कुछ और बातें:
- इसे केवल मेथड के अंदर उपयोग किया जा सकता है
- यह पैरेंट मेथड को कॉल करने का परिणाम लौटाता है
- इसे कई बार कॉल किया जा सकता है
बोल्ड लाइन (super परिणाम लौटाता है) super के कुछ उपयोगों को समझने की कुंजी है जो आपको जंगल में मिल सकते हैं।
आप super का उपयोग डेकोरेटर पैटर्न को लागू करने के लिए कर सकते हैं, या यदि आप इसे initialize मेथड के अंदर कॉल करते हैं तो इसका उपयोग पैरेंट क्लास पर इंस्टेंस वेरिएबल्स को इनिशियलाइज़ करने के लिए किया जा सकता है।
सारांश
आपने Ruby super कीवर्ड के बारे में सीखा, यह क्या है और यह विभिन्न स्थितियों में कैसे काम करता है!
यदि आपको यह लेख पसंद आया तो आप RubyGuides न्यूज़लेटर की सदस्यता लेना चाह सकते हैं ताकि आपको ऐसी और सामग्री और अन्य उपयोगी Ruby टिप्स मिलें जो केवल ग्राहकों के लिए उपलब्ध हैं।