如何在Ruby中获取类实例?

假设我有一个名为Post的类,它有许多已启动的实例(即Post.new(:name => 'foo') )。

有没有办法通过调用它上面的东西来检索该类的所有实例? 我正在寻找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 # => [#, #] p ObjectSpace.each_object(Foo).to_a # => [#, #] #order is different 

您可以使用ObjectSpace来检索给定类的所有实例化对象:

 posts = [] ObjectSpace.each_object Post do |post| posts << post end 

这几乎肯定是一个坏主意 - 例如,它还将加载尚未被垃圾收集的早期请求仍在内存中的Post实例。 可能有更好的方式来获得你关心的post,但我们需要更多关于你要做什么的信息。

覆盖新; 保持计数; 揭露财产。