我正在尝试在ruby中使用类变量。但是类变量在整个层次结构中都会发生变化,因此对此目标毫无用处:
假设我有3个类,每个类都继承,除了父类。
class A
end
class B < A
end
class C < B
end
我如何在中产阶级中修改或创建一个静态变量,以便A类没有它,但C类却没有。
B.num = 2
A.num # undefined or nil
C.num # 2
我还应该指明A.num仍然可以使用,而不会改变B.num或C.num,除非它继承。
答案 0 :(得分:3)
自OP改变问题后编辑
为A
和B
使用类实例变量。
class A
singleton_class.class_eval{attr_accessor :num}
end
class B < A
singleton_class.class_eval{attr_accessor :num}
end
class C < B
def self.num; superclass.num end
def self.num= v; superclass.num = v end
end
B.num = 2
A.num # => nil
C.num # => 2