Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby के super कीवर्ड में महारत: पैरेंट मेथड्स को प्रभावी ढंग से कॉल करें

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 टिप्स मिलें जो केवल ग्राहकों के लिए उपलब्ध हैं।


  1. Ruby Enumerable मेथड्स में महारत: Any, All, None और One Ruby Enumerable मेथड्स में महारत: Any, All, None और One

    आज आप 4 Enumerable मेथड्स के बारे में सीखेंगे जो आपको तत्वों की एक सरणी, हैश, या Enumerable मॉड्यूल को शामिल करने वाले किसी भी अन्य ऑब्जेक्ट्स के खिलाफ एक सशर्त कथन की जांच करने में मदद करेंगे। ये 4 मेथड्स या तो true या false लौटाते हैं। विषय सूची1 Ruby All मेथड2 All और खाली सरणियाँ3 Ruby None मेथड

  1. Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड

    आइए grep मेथड के बारे में बात करते हैं। यह मेथड आपके लिए क्या कर सकता है? आप enumerable ऑब्जेक्ट्स को फ़िल्टर करने के लिए Grep का उपयोग कर सकते हैं, जैसे Arrays और Ranges। "लेकिन select पहले से ही ऐसा करता है!" हाँ, लेकिन grep अलग तरीके से काम करता है और अलग परिणाम उत्पन्न करता है। आइए कुछ

  1. Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड

    Map एक Ruby मेथड है जिसका उपयोग आप Arrays, Hashes और Ranges के साथ कर सकते हैं। map का मुख्य उपयोग डेटा को ट्रांसफॉर्म करना है। उदाहरण के लिए: स्ट्रिंग्स की एक सरणी दिए जाने पर, आप हर स्ट्रिंग पर जा सकते हैं और हर कैरेक्टर को UPPERCASE बना सकते हैं। या यदि आपके पास User ऑब्जेक्ट्स की एक सूची है... आ