任何人都可以说我,为什么不起作用:
class A
attr_accessor :b
end
a = A.new
a.instance_eval do
b = 2
end
a.b
=> nil
我在做什么错?
答案 0 :(得分:6)
罪魁祸首在于代码的这一部分:
a.instance_eval do
b = 2
end
虽然在您的实例的上下文中评估b = 2
,但它不会调用setter。相反,它只是在当前范围内创建一个名为b
的新局部变量。要调用setter,您必须进一步澄清代码以解决歧义:
a.instance_eval do
self.b = 2
end
答案 1 :(得分:0)
变化:
a.instance_eval do
self.b = 2
end