में एक इंस्टेंस चर सेट होने पर कैसे पता चलेगा रूबी में इंस्टेंस चर के सेटिंग को ओवरराइड करने का कोई तरीका है?रूबी
@foo = "bar"
मुझे लगता है कि रोकना कर सकते हैं और कुछ करना (यह रिकॉर्ड या पुट की तरह, उदाहरण के लिए)
मुझे लगता है, मैं काम ओवरराइड करने के लिए कोशिश कर रहा हूँ:
कहते हैं कि मैं एक उदाहरण चर सेट करने देता है सभी प्रकार के लिए ऑपरेटर। क्या यह भी किया जा सकता है?
class Module
def attr_log_accessor(*symbols)
symbols.each { | symbol |
module_eval("def #{symbol}() @#{symbol}; end")
module_eval("def #{symbol}=(val)
@#{symbol} = val
puts \"#{symbol} has changed\"
end")
}
end
end
तब, जब मैं एक्सेसर को परिभाषित करने और यह निर्धारित करते हैं, मेरी कोड का निष्पादित:
class Test
attr_log_accessor :foo
def DoSomething
self.foo = "bar"
end
end
दुर्भाग्य से,
सबसे अच्छा मैं के साथ आए हैं, अब तक, यह है इसके लिए मुझे @foo = "bar" की बजाय self.foo = "bar" लिखने की आवश्यकता है।
कोई विचार?
को वहाँ 'trace_var' (http://www.ruby-doc.org/core/classes/Kernel.html#M005937) बदलना होगा, लेकिन केवल वैश्विक युद्धों के लिए। –
वहाँ भी प्रत्यक्ष मॉड्यूल है, जो संभव के रूप में इस के रूप में पास हो सकता है: http://www.oreillynet.com/ruby/blog/2006/01/ruby_design_patterns_observer.html हालांकि, getters/setters के बजाय का उपयोग कर पड़ सकता है सीधे उदाहरण चर (जो मूल रूप से आप इसे कैसे अब कर रहे हैं) –