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

रूबी उपनाम कीवर्ड का उपयोग कैसे करें

आप रूबी पद्धति को दो तरह से वैकल्पिक नाम दे सकते हैं:

  • उपनाम (कीवर्ड)
  • उपनाम_विधि

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

यह छवि मतभेदों का सारांश है :

रूबी उपनाम कीवर्ड का उपयोग कैसे करें

आइए एक ठोस समझ पाने के लिए इन अंतरों को और अधिक विस्तार से देखें!

उपनाम कीवर्ड

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

ऐसा दिखता है :

alias print_something puts

print_something 1

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

क्योंकि alias एक कीवर्ड है जिसमें कुछ दिलचस्प विशेषताएं हैं :

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

उपनाम के मान्य रूप हैं :

  • उर्फ ए बी
  • उपनाम :a :b
  • उपनाम:"#{}" :b

ध्यान दें कि तर्कों के बीच कोई अल्पविराम नहीं है एक नियमित विधि की तरह।

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

उदाहरण :

a = :print_something
b = :puts

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

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

उपनाम_विधि विधि

अगला:

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

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

दस्तावेज़ीकरण का विवरण यहां दिया गया है :

<ब्लॉकक्वॉट>

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

उदाहरण :

class Foo
  alias_method :print_something, :puts
end

यह उर्फ ​​print_something . होगा करने के लिए puts अंदर Foo

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

उदाहरण :

class Foo
  alias_method "print_something", "puts"
end

उपनाम बनाम उपनाम_विधि

आपने 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)
के लिए अपरिभाषित विधि 'alias_method'

क्योंकि आप किसी ऑब्जेक्ट के अंदर काम कर रहे हैं, क्लास में नहीं!

इंस्टेंस विधि के अंदर आपके पास 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 (keyword) , रूबी विधि की एक प्रति बनाता है।

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

लेकिन विधि की एक वास्तविक प्रति

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

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 कीवर्ड में कुछ विशेष विशेषताएँ होती हैं जिन्हें आपको याद रखना और ध्यान में रखना होता है।

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

इस लेख को अपने रूबी दोस्तों के साथ साझा करें ताकि वे भी सीख सकें!


  1. रूबी का उपयोग कैसे करें कोई भी, सभी, कोई नहीं और एक

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

  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्