【发布时间】:2012-04-09 05:33:42
【问题描述】:
谁能告诉我,为什么这不起作用:
class A
attr_accessor :b
end
a = A.new
a.instance_eval do
b = 2
end
a.b
=> nil
我做错了什么?
【问题讨论】:
标签: ruby block instance-eval
谁能告诉我,为什么这不起作用:
class A
attr_accessor :b
end
a = A.new
a.instance_eval do
b = 2
end
a.b
=> nil
我做错了什么?
【问题讨论】:
标签: ruby block instance-eval
罪魁祸首在于这部分代码:
a.instance_eval do
b = 2
end
虽然b = 2 是在您的实例的上下文中评估的,但它不会调用setter。相反,它只是在当前范围内创建一个名为 b 的新局部变量。要调用 setter,您必须进一步澄清您的代码以解决歧义:
a.instance_eval do
self.b = 2
end
【讨论】:
变化:
a.instance_eval do
self.b = 2
end
【讨论】: