1 - क्या यह अभी भी बिल्कुल उपयोग किया जाता है?
जाहिर है हाँ, alias_method_chain()
still used in Rails (संस्करण 3.0.0) के रूप में है।
2 - जब आप alias_method_chain और क्यों प्रयोग करेंगे?
(नोट:। निम्नलिखित काफी हद तक पाओलो पेरोटा है, जो एक उत्कृष्ट पुस्तक है कि आप अपने हाथों पर मिलना चाहिए है द्वारा Metaprogramming Ruby में alias_method_chain()
की चर्चा पर आधारित है)
के साथ शुरू करते हैं एक बुनियादी उदाहरण:
class Klass
def salute
puts "Aloha!"
end
end
Klass.new.salute # => Aloha!
अब मान लें कि हम लॉगिंग व्यवहार के साथ Klass#salute()
चारों ओर करना चाहते हैं।
class Klass
def salute_with_log
puts "Calling method..."
salute_without_log
puts "...Method called"
end
alias_method :salute_without_log, :salute
alias_method :salute, :salute_with_log
end
Klass.new.salute
# Prints the following:
# Calling method...
# Aloha!
# ...Method called
हम एक नई विधि salute_with_log()
बुलाया परिभाषित और salute()
को यह एलियास: हम कि पेरोटा क्या कहता है एक उर्फ आसपास कर सकते हैं। salute()
पर कॉल करने के लिए उपयोग किया जाने वाला कोड अभी भी काम करता है, लेकिन यह नया लॉगिंग व्यवहार भी प्राप्त करता है।हम यह भी मूल salute()
को एक उपनाम परिभाषित, इसलिए हम अभी भी प्रवेश के बिना सलाम कर सकते हैं:
Klass.new.salute_without_log # => Aloha!
तो, salute()
अब salute_without_log()
कहा जाता है। अगर हम लॉगिंग करना चाहते हैं, तो हम salute_with_log()
या salute()
पर कॉल कर सकते हैं, जो एक ही विधि के उपनाम हैं। उलझन में? अच्छा!
पेरोटा के अनुसार, चारों ओर उर्फ इस तरह की रेल में बहुत आम है: रेल का एक और उदाहरण पर
देखो एक समस्या अपने तरीके से सुलझाने। कुछ संस्करणों पहले रेल कोड निहित एक ही मुहावरे के कई उदाहरण: एक उर्फ के आसपास (155) एक पद्धति के लिए एक सुविधा जोड़ने के लिए इस्तेमाल किया गया था, और विधि के पुराने संस्करण को नाम दिया गया था method_without_feature()
जैसे कुछ। के अलावा विधि नाम, जो प्रत्येक समय बदल गया, यह कोड था, यह हमेशा स्थान पर डुप्लिकेट किया गया था। अधिकांश भाषाओं में, आप उस तरह के नकल से बच नहीं सकते हैं। रूबी में, आप अपने पैटर्न पर कुछ मेटाप्रोग्रामिंग जादू छिड़का सकते हैं और इसे अपने विधि में निकाल सकते हैं ... और इस प्रकार alias_method_chain()
पैदा हुआ था।
दूसरे शब्दों में, आप मूल विधि, foo()
, और बढ़ाया विधि, foo_with_feature()
प्रदान करते हैं और आप तीन तरीकों के साथ अंत: foo()
, foo_with_feature()
, और foo_without_feature()
। पहले दो में सुविधा शामिल है, जबकि तीसरा नहीं है। इन उपनामों को चारों ओर डुप्लिकेट करने के बजाय, alias_method_chain()
provided by ActiveSupport आपके लिए सभी अलियासिंग करता है।
+1 "उलझन में? अच्छा कहने के लिए +1" – jperelli
और छोटे जोड़े: इसलिए अब हम केवल '' 'alias_method_chain टाइप कर सकते हैं: foo,: feature''' और हमारे पास 3 विधियां होंगी:' '' foo''', '' foo_withoutfefeature ''' foo_without_feature '' 'जो' Yases Sulaiman * के रूप में ठीक से अलियाकृत हैं – freemanoid
से पहले वर्णन करें "कोई भी पर्याप्त उन्नत तकनीक जादू से अलग नहीं है।" आर्थर सी क्लार्क –