为每个 child class 创建 parent 的 class 变量的新实例

Create a new instance of parent's class variable for each child class

我有这个 parent class:

class ListBase
  @@list = []

  def self.list
    @@list
  end
end

我正在尝试创建两个 child class,如下所示:

class Child1 < ListBase
end

class Child2 < ListBase
end

我的印象是这些 child class 中的每一个都有自己的 @@list class 变量。但是,我明白了:

Child1.list.push(1)
Child2.list.push(2)
Child1.list # => [1, 2]
Child2.list # => [1, 2]

这意味着 child classes 从 parent class.

共享 @@list

如何在不重复的情况下为每个 child class 创建一个单独的 class 变量?

您正在通过 class 方法 (getter/reader) 使用 class 变量。
因此,您可以在派生 classes 中覆盖该方法,并为每个派生 class.
使用自己的 class 变量 不好玩,但是 class 变量是如何工作的,它们在 class 和派生的 class 中共享。

class ListBase
  def self.list
    @@base_list ||= []
  end
end

class ListOne
  def self.list
    @@one_list ||= []
  end
end

class ListTwo
  def self.list
    @@two_list ||= []
  end
end

ListOne.list << 1
ListTwo.list << 2

puts ListOne.list
# => [1]
puts ListTwo.list
# => [2]

正如@CarySwoveland 评论的那样,在您的用例中,您应该使用 class 实例变量:

class ListBase
  @list = []

  def self.list
    @list
  end
end

甚至不确定您为什么要为您的用例使用 class 变量。