Есть ли способ переопределить установку переменных экземпляра в Ruby?
Допустим, я установил переменную экземпляра:
@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
К сожалению, для этого требуется, чтобы я написал self.foo = "bar" вместо @foo = "bar".
Есть мысли?