fre*_*eze 0 ruby block instance-eval
任何人都可以说我,为什么这不起作用:
class A
attr_accessor :b
end
a = A.new
a.instance_eval do
b = 2
end
a.b
=> nil
Run Code Online (Sandbox Code Playgroud)
我在做什么错了?
罪魁祸首在于这部分代码:
a.instance_eval do
b = 2
end
Run Code Online (Sandbox Code Playgroud)
虽然b = 2
在您的实例的上下文中进行评估,但它不会调用setter.相反,它只是创建一个b
在当前范围内调用的新局部变量.要调用setter,您必须进一步澄清代码以解决歧义:
a.instance_eval do
self.b = 2
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
135 次 |
最近记录: |