将某个类的每个对象存储在一个类数组中是否可以?

时间:2011-07-25 23:37:38

标签: ruby arrays oop class

创建一个类数组并保存该类的每个对象是否可以?我不确定在Ruby中是否存在与此类似的东西或者实现此目的的设计模式,因此这是我访问类的每个对象的解决方案:

class Foo
  @@all = []

  def self.all
    @@all
  end

  def initialize 
    @@all << self
  end
end

Foo.all.each do |foo|
  # do something
end

3 个答案:

答案 0 :(得分:3)

你可以原生地做到这一点:

ObjectSpace.each_object(Foo) do |foo|
  # do something with foo
end

答案 1 :(得分:1)

这是有问题的,因为它会使类的所有实例都不朽 - 只要它们在数组中,数组就会使它们保持活着状态。最好使用ObjectSpace.each_object(Foo)(LBg提到)或WeakRefs数组,你定期剔除(这节省空间)。

如果这是一个短暂的脚本,不会使用庞大的数据集,或者你实际上希望使所有的对象不朽,你会小心不要吹堆,然后没有问题。

答案 2 :(得分:1)

您最终可能会在Foo类本身中添加太多逻辑。相反,您可能想要创建一个FooCollection对象。

如果您需要多个foo对象集合,这将证明特别有用。这发生在我身上!