Ruby 创建父对象的新实例';每个子类的s类变量

Ruby 创建父对象的新实例';每个子类的s类变量,ruby,inheritance,class-variables,class-instance-variables,Ruby,Inheritance,Class Variables,Class Instance Variables,我有一个父类: class ListBase @@list = [] def self.list @@list end end 我尝试创建两个子类,如下所示: class Child1 < ListBase end class Child2 < ListBase end 这意味着子类共享父类的@@list 如何在不重复的情况下为每个子类创建单独的类变量?您正在通过类方法(getter/reader)使用类变量。 因此,您可以在派生类中重写该方法,并为每个派

我有一个父类:

class ListBase
  @@list = []

  def self.list
    @@list
  end
end
我尝试创建两个子类,如下所示:

class Child1 < ListBase
end

class Child2 < ListBase
end
这意味着子类共享父类的
@@list


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

您正在通过类方法(getter/reader)使用类变量。
因此,您可以在派生类中重写该方法,并为每个派生类使用自己的类变量。
这并不有趣,但是类变量是如何工作的,它们在类和派生类中也是共享的

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]
类列表库
def self.list
@@基本列表| |=[]
结束
结束
ListOne类
def self.list
@@一个列表| |=[]
结束
结束
第二类
def self.list
@@两个列表| |=[]
结束
结束
ListOne.list[2]

您正在通过类方法(getter/reader)使用类变量。
因此,您可以在派生类中重写该方法,并为每个派生类使用自己的类变量。
这并不有趣,但是类变量是如何工作的,它们在类和派生类中也是共享的

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]
类列表库
def self.list
@@基本列表| |=[]
结束
结束
ListOne类
def self.list
@@一个列表| |=[]
结束
结束
第二类
def self.list
@@两个列表| |=[]
结束
结束
ListOne.list[2]

作为@CarySwoveland注释,在您的用例中,您应该使用一个类实例变量:

class ListBase
  @list = []

  def self.list
    @list
  end
end

甚至不知道您为什么想到在您的用例中使用类变量。

作为@CarySwoveland注释,在您的用例中,您应该使用类实例变量:

class ListBase
  @list = []

  def self.list
    @list
  end
end

甚至不知道为什么要在用例中使用类变量。

检查:我很好奇为什么要这样做。类实例变量通常用于您所描述的内容,因为它们的范围仅限于创建它们的类。实际上,您的问题“如何为每个子类创建单独的类变量而不重复?”是矛盾的。类变量用于在子类之间共享,而您试图不共享它。检查:我很好奇您为什么要这样做。类实例变量通常用于您所描述的内容,因为它们的范围仅限于创建它们的类。实际上,您的问题“如何为每个子类创建单独的类变量而不重复?”是矛盾的。类变量是用于在子类之间共享的,而您试图不共享它。谢谢,是的,一旦您指出它,我就非常清楚应该使用类实例变量。谢谢,是的,一旦您指出它,我就非常清楚应该使用类实例变量。