Ruby静态继承

时间:2014-01-07 22:48:56

标签: ruby inheritance static

我正在尝试在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,除非它继承。

1 个答案:

答案 0 :(得分:3)

自OP改变问题后编辑

AB使用类实例变量。

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