0

谁能告诉我,为什么这不起作用:

class A
  attr_accessor :b
end

a = A.new
a.instance_eval do
  b = 2
end

a.b
=> nil

我在做什么错?

4

2 回答 2

6

罪魁祸首在于这部分代码:

a.instance_eval do
  b = 2
end

尽管b = 2在您的实例的上下文中进行评估,但它不会调用 setter。相反,它只是创建一个b在当前范围内调用的新局部变量。要调用 setter,您必须进一步澄清您的代码以解决歧义:

a.instance_eval do
  self.b = 2
end
于 2012-03-25T11:47:28.740 回答
0

改变:

a.instance_eval do
  self.b = 2
end
于 2012-03-25T11:47:07.233 回答