में कक्षा विधि का विस्तार करना मैं रूबी की मेटाप्रोग्रामिंग सुविधाओं के साथ खेल रहा हूं, और मुझे थोड़ा बालों का पता चल रहा है। मैं एक मॉड्यूल का उपयोग कर एक विधि कॉल लपेटने की कोशिश कर रहा हूँ। वर्तमान में, मैं यह कर रहा हूँ:मॉड्यूल
module Bar
module ClassMethods
def wrap(method)
class_eval do
old_method = "wrapped_#{method}".to_sym
unless respond_to? old_method
alias_method old_method, method
define_method method do |*args|
send old_method, *args
end
end
end
end
end
def self.included(base)
base.extend ClassMethods
end
end
class Foo
include Bar
def bar(arg = 'foo')
puts arg
end
wrap :bar
end
तीन सवाल:
वहाँ विधि का नाम बदलने के बिना यह करने के लिए कोई तरीका है, तो के रूप में
super
के उपयोग की अनुमति के लिए? या कुछ क्लीनर/छोटा?क्या डिफ़ॉल्ट मान सेट करने का कोई साफ तरीका है?
क्या
wrap :bar
को आगे बढ़ाने के लिए कोई साधन है?
वास्तविक जीवन में मैं इसके लिए कक्षा विरासत का उपयोग करूंगा। –
मैं भी, लेकिन मैं इस सब को समझने की कोशिश कर रहा हूं। :-) –
संबंधित: http://stackoverflow.com/questions/6631182/difference-between-class-eval-and-instance-eval-in-a- मॉड्यूल –