(问题已发布在Ruby Forum,但没有在那里引起任何答案)。动态添加实例方法无法访问类变量
这是我的代码:
class MC
def initialize
@x = 5
@@y = 6
end
def f
puts @x
puts @@y
end
end
m = MC.new
m.f
m.f
产生预期的输出没有错误:
5
6
但这:
def m.g
puts @x
puts @@y
end
m.g
生产:
5
warning: class variable access from toplevel
NameError: uninitialized class variable @@y in Object
为什么我可以从f
访问@@y
,但不能从g
访问?
在提示中提到toplevel
和Object
,错误信息令我费解。
@x
打印为5
,所以其环境为MC
。这排除了m.g
的定义中的@x
和@@y
参考顶级环境(Object
)而不是MC
的可能性。
为什么我收到错误信息?
这是之前问过的:http://stackoverflow.com/q/24510948/477037 – Stefan
@Stefan:是的。不幸的是,这里也没有很好的解释。 –