我无法找出或找到有关如何将初始化对象指针推送到从类级别变量访问的数组的任何信息。这是一个例子。
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
谢谢你的帮助。
答案 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