最近在看 ruby 元编程 遇到如下问题 求大神赐教
class AnotherClass
@@v = 3 #类变量
@v = 4 #类实例变量
end
class OneClass
def add_method_to aClass
aClass.class_eval do
def self.new_method #定义AnotherClass类的一个类方法
p @v
p @@v
end
end
end
end
obj = OneClass.new
obj.add_method_to(AnotherClass)
AnotherClass.new_method
元编程中关于class_eval函数的描述: class_eval() 方法会同时修改 self 和当前类,通过修改当前类,class_eval() 实际上 是重新打开了该类,就像 class 关键字所做的一样。 如上所述,class_eval 打开了类,那么自然可以访问类变量,然而上述代码运行结果 如下:
4
in `new_method': uninitialized class variable @@v in OneClass (NameError)
如上,类实例变量可以访问,但类变量却不可以,WHY?