Is there any way to override the setting of instance variables in Ruby?
Lets say I set an instance variable:
@foo = "bar"
Can I intercept that and do something (like record it or puts, for instance)
I suppose, I am trying to override the assignment operator for all types. Can this even be done?
The best I have come up with, so far, is this:
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
Then, when I define the accessor and set it, my code gets executed:
class Test
attr_log_accessor :foo
def DoSomething
self.foo = "bar"
end
end
Unfortunately, this requires me to write self.foo = "bar", instead of @foo = "bar".
Any thoughts?