我正在尝试向 Observable 添加一个方法,以便对于包含它的类,它可以调用observe_attribute :attribute
将生成attribute=
具有逻辑的方法的方法,以检查值是否已更改:
module Observable
def observe_attribute(attribute)
raise NameError, "#{self.class} does not contain #{attribute}" unless instance_variables.include? "@#{attribute}"
eval %" def #{attribute}=(new_value)
unless @#{attribute} == new_value
changed
notify_observers
puts 'ok'
end
end
";
end
end
但是,对于以下类,最后一次调用会observe_attribute :att
导致 NoMethodError,而注释掉的则不会:
class Test
include Observable
def initialize
@att = 3
#observe_attribute :att
end
observe_attribute :att
end
为了使最后一次调用observe_attribute
正常工作,我需要做什么?