创建一个类数组并保存该类的每个对象是否可以?我不确定在Ruby中是否存在与此类似的东西或者实现此目的的设计模式,因此这是我访问类的每个对象的解决方案:
class Foo
@@all = []
def self.all
@@all
end
def initialize
@@all << self
end
end
Foo.all.each do |foo|
# do something
end
答案 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
对象集合,这将证明特别有用。这发生在我身上!