如果希望在一个类中存储一个变量,那么除了【类实例变量】之外,还可以用以@@开头的【类变量】:
class C @@v=1 end
类变量与类实例变量不同,它们可以被子类或类的实例所使用。
class D < C def my_method; @@v; end end D.new.my_method #=>1
但请注意:类变量有一个缺陷:
@@v=1 class MyClass @@v=2 end @@v #=>2
得到这样的结果是因为类变量并不真正属于类,它们属于类体系结构。由于@@v定义于main的上下文,它属于main的类Object,所以也属于Object的后代。
MyClass继承自Object,因此它共享了这个类变量。
由于存在这样的“陷阱”,应尽量避免使用类变量,而尽可能使用类实例变量。