Ruby将初始化对象添加到类数组中

时间:2014-08-26 14:02:43

标签: ruby

我无法找出或找到有关如何将初始化对象指针推送到从类级别变量访问的数组的任何信息。这是一个例子。

Class Color
  @@colors = Array.new

  def initialize
   @@colors << red
  end

  def self.list
    @@colors.each do |color|
      puts color.to_hex
    end
  end
end

red = Color.new

谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

我会这样做:

class Color
  @colors = []

  def self.new(*args, &blk)
    @colors << super
  end
  def self.list
    puts @colors.map(&:to_hex)
  end
end

red = Color.new

Color.list

就个人而言,我觉得在实例初始化程序中做类级别的东西很不舒服,它感觉不对。该类是一个完全独立的对象,实例对OO的类气味了如指掌。

答案 1 :(得分:1)

您可以使用self来引用该类的当前实例:

class Color
  @@colors = Array.new

  def initialize
   @@colors << self
  end

  def self.list
    @@colors.each do |color|
      puts color.to_hex
    end
  end
end

答案 2 :(得分:0)

您应该更喜欢类实例变量而不是类变量。类变量就像全局变量 - 如果在子类中更改它,它也会更改超类中的变量。这很少是想要的效果。这里用类实例变量重写了@JKillian的代码:

class Color
  class << self
    attr_accessor :colors
  end
  @colors = Array.new

  def initialize
   Color.colors << self
  end

  def self.list
    @colors.each do |color|
      puts color.to_hex
    end
  end
end