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

Ruby में Alias कीवर्ड का उपयोग करके मेथड एलियास बनाना

Ruby में किसी मेथड को वैकल्पिक नाम देने के दो तरीके हैं:

  • alias (कीवर्ड)
  • alias_method

चूंकि ये दोनों थोड़े अलग तरीके से एक ही काम करते हैं, इसलिए यह विषय भ्रमित करने वाला हो सकता है।

यह छवि अंतरों का सारांश है:

Ruby में Alias कीवर्ड का उपयोग करके मेथड एलियास बनाना

आइए इन अंतरों को विस्तार से समझते हैं ताकि आपको ठोस समझ मिल सके!

alias कीवर्ड

पहला है alias, जो एक Ruby कीवर्ड है (जैसे if, def, class आदि)।

यह ऐसा दिखता है:

 alias print_something puts print_something 1 

अब print_something को कॉल करना puts को कॉल करने जैसा ही है।

चूंकि alias एक कीवर्ड है, इसके कुछ दिलचस्प गुण हैं:

  • इसका विशेष सिंटैक्स है
  • इसे आपके कोड में कहीं भी उपयोग किया जा सकता है
  • यह ग्लोबल वेरिएबल्स को एलियास कर सकता है (ऐसा न करें!)

alias के वैध रूप हैं:

  • alias a b
  • alias :a :b
  • alias :"#{}" :b

ध्यान दें कि आर्गुमेंट्स के बीच कोई कॉमा नहीं होता जैसे एक नियमित मेथड में होता है।

Ruby को उम्मीद होती है कि a और b दोनों वैध मेथड नाम हों, वेरिएबल्स यहां काम नहीं करते। यदि आप वेरिएबल्स का उपयोग करना चाहते हैं तो आपको ऐसा कुछ करना होगा...

उदाहरण:

 a = :print_something b = :puts alias :"#{a}" :"#{b}" 

लेकिन यह बदसूरत दिखता है, इसलिए आप डायनामिक मेथड नामों के लिए alias_method का उपयोग करना चाह सकते हैं।

alias_method मेथड

अगला:

हमारे पास alias_method है, जो Module पर परिभाषित एक मेथड है।

आप इस मेथड का उपयोग केवल क्लास और मॉड्यूल लेवल पर कर सकते हैं, इंस्टेंस मेथड्स के अंदर नहीं।

डॉक्यूमेंटेशन से विवरण:

alias_method: "new_name को old_name मेथड की एक नई कॉपी बनाता है। इसका उपयोग उन मेथड्स तक पहुंच बनाए रखने के लिए किया जा सकता है जिन्हें ओवरराइड किया गया है।"

उदाहरण:

 class Foo alias_method :print_something, :puts end 

यह Foo के अंदर print_something को puts का एलियास बना देगा।

आप alias_method आर्गुमेंट्स के रूप में स्ट्रिंग्स का उपयोग कर सकते हैं।

उदाहरण:

 class Foo alias_method "print_something", "puts" end 

alias बनाम alias_method

आपने alias और alias_method का अवलोकन देखा।

लेकिन अंतर कब खेल में आते हैं?

  1. जब आप डायनामिकली जनरेटेड मेथड नाम के लिए एलियास परिभाषित करते हैं (जैसे "abc#{rand}")
  2. जब आप किसी मेथड के अंदर एलियास परिभाषित करते हैं

डायनामिकली जनरेटेड मेथड नाम के लिए एलियास परिभाषित करना alias कीवर्ड के साथ संभव है लेकिन आपको इंटरपोलेटेड सिम्बल्स का उपयोग करना होगा।

alias_method के साथ आपको अधिक लचीले आर्गुमेंट्स मिलते हैं।

उदाहरण:

 class Cat def speak "meow" end alias_method "#{name.downcase}_speak", :speak end p Cat.new.cat_speak # "meow" 

अब:

यदि आप किसी मेथड के अंदर एलियास परिभाषित करना चाहते हैं तो आपको यह त्रुटि मिलेगी:

 undefined method 'alias_method' for # (NoMethodError) 

क्योंकि आप एक ऑब्जेक्ट के भीतर काम कर रहे हैं न कि क्लास के!

एक इंस्टेंस मेथड के अंदर आपके पास Module में परिभाषित मेथड्स तक पहुंच नहीं होती, जहां alias_method परिभाषित है।

यहां एक संभावित समाधान है:

 def enable_aliased_methods self.class.send(:alias_method, :x, :testing) end 

alias का उपयोग करके:

 def enable_aliased_methods alias :x :testing end 

एक महत्वपूर्ण अंतर:

  • alias द्वारा परिभाषित मेथड उस क्लास से संबंधित होगा जहां alias उपयोग किया गया है
  • alias_method द्वारा परिभाषित मेथड self से संबंधित होगा, यानी उस समय की वर्तमान क्लास जब कोड चलाया जाता है

यह क्यों मायने रखता है:

यदि आप पैरेंट क्लास पर एक मेथड कॉल करते हैं जो alias कीवर्ड का उपयोग करता है...

तो एलियासिंग पैरेंट क्लास पर होगी न कि उस क्लास पर जो मेथड को कॉल कर रही है।

उदाहरण:

 class Food def create_alias alias print_on_screen puts end end class Apple < Food end Apple.new.create_alias 

लेकिन यदि आप alias_method का उपयोग करते हैं तो मेथड केवल Apple पर एलियास होगा।

एलियासिंग मेथड की एक कॉपी बनाता है

alias_method और alias (कीवर्ड) के विवरण के अनुसार, Ruby मेथड की एक कॉपी बनाता है।

यह केवल एक नया नाम नहीं है।

बल्कि मेथड की वास्तविक कॉपी है।

इसके कुछ व्यावहारिक निहितार्थ हैं:

 def bacon 123 end alias :x :bacon x # 123 bacon # 123 

तो हमने x को bacon का एलियास बनाया, अब देखते हैं कि अगर मैं bacon को फिर से परिभाषित करता हूं तो क्या होता है:

 def bacon 234 end x # 123 bacon # 234 

x मेथड वही रहता है, लेकिन bacon नया मान देता है!

यह आश्चर्य की बात हो सकती है यदि आप एलियासिंग मेथड्स के बाद अपनी क्लास में मॉड्यूल्स शामिल कर रहे हैं।

वीडियो ट्यूटोरियल

सारांश

आम तौर पर मुझे alias_method अधिक पसंद है क्योंकि यह एक वास्तविक मेथड है।

जबकि alias कीवर्ड के कुछ विशेष गुण हैं जिन्हें आपको याद रखना और ध्यान में रखना होता है।

क्या आपने कुछ नया सीखा?

इस लेख को अपने 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 ऑब्जेक्ट्स की एक सूची है... आ