remove_method
ज्यादातर मामलों में काम करना चाहिए। लेकिन अगर आपका alias_method
किसी मौजूदा विधि को ओवरराइट करता है, तो आपको मूल को अलग alias_method
कॉल के माध्यम से सहेजने की आवश्यकता हो सकती है।
alias_method :contains?, :original_contains?
remove_method :original_contains? # optional
भी ध्यान दें कि एक वर्ग है कि एक से अधिक थ्रेड में इस्तेमाल को संशोधित करने की स्थिति दौड़ के लिए खतरा है:
# assuming :contains? is already a method
alias_method :original_contains?, :contains?
alias_method :contains?, :include?
फिर मूल स्थिति बहाल करने के लिए। और यदि आप उपनामों का उपयोग करने से libs को अस्वीकार करने का प्रयास कर रहे हैं, तो आप इसे रोक नहीं सकते हैं यदि आप उपनाम मौजूद हैं, तो आप उन libs विधियों को बुला रहे हैं। हम रूबी 2.0 में ऐसा करने का एक तरीका देख सकते हैं: http://yehudakatz.com/2010/11/30/ruby-2-0-refinements-in-practice/
यदि आप कह सकते हैं कि आप उपनाम को क्यों हटाना चाहते हैं तो यह सहायक होगा। यदि विधि का नाम पहले मौजूद नहीं था, तो आपके बंदर-पैच द्वारा कोई अन्य libs प्रभावित नहीं होना चाहिए। साथ ही, आपको String
पैच करने के बजाय String
(या एक स्ट्रिंग उदाहरण में प्रतिनिधि) को उपclassing पर विचार करना चाहिए।
'hi_ मूल रूप से विरासत में मिला या मिश्रित होने पर' remove_method' बेहतर है। 'Undef' या' undef_method' का उपयोग करके कॉल को विरासत/मिश्रण-श्रृंखला में प्रचार करने से रोक दिया जाएगा। – Kelvin
मैं वास्तव में यह देखने के लिए अपना जवाब संपादित कर रहा था कि आपने टिप्पणी की थी = डी –