假设我有一个名为Post的类,它有许多启动的实例(即Post.new(:name => 'foo')
)。如何在Ruby中获取类实例?
有没有办法通过调用它的东西来检索该类的所有实例? 我在找东西沿线Post.instances.all
想法?
谢谢!
假设我有一个名为Post的类,它有许多启动的实例(即Post.new(:name => 'foo')
)。如何在Ruby中获取类实例?
有没有办法通过调用它的东西来检索该类的所有实例? 我在找东西沿线Post.instances.all
想法?
谢谢!
龙虎斗都alphazero的和PreciousBodilyFluids答案:
class Foo
@@instance_collector = []
def initialize
@@instance_collector << self
#other stuff
end
def self.all_offspring
@@instance_collector
end
end
a = Foo.new
b = Foo.new
p Foo.all_offspring # => [#<Foo:0x886d67c>, #<Foo:0x886d668>]
p ObjectSpace.each_object(Foo).to_a # => [#<Foo:0x886d668>, #<Foo:0x886d67c>] #order is different
重写新;继续计数;公开财产。
+1简短,甜美,至点。 – 2011-06-15 23:39:46
您可以使用ObjectSpace检索给定类的所有实例化对象:
posts = []
ObjectSpace.each_object Post do |post|
posts << post
end
这几乎可以肯定是一个坏主意,虽然 - 例如,它也将加载仍然在内存中,从发布实例先前的请求没有被垃圾回收。有可能有更好的方式来获得你关心的帖子,但是我们需要更多关于你想要做什么的信息。
你也许可以手动存储的参考列表,您从构造函数更新......但我很好奇,为什么你需要做的是什么? – Locksfree 2011-06-15 23:33:15