假设我有一个名为Post的类并初始化了多个实例(例如Post.new(:name => 'foo')
)。
是否有一种方法可以通过调用该类的某些东西来检索该类的所有实例?
我正在寻找类似于Post.instances.all
这样的东西
假设我有一个名为Post的类并初始化了多个实例(例如Post.new(:name => 'foo')
)。
是否有一种方法可以通过调用该类的某些东西来检索该类的所有实例?
我正在寻找类似于Post.instances.all
这样的东西
posts = []
ObjectSpace.each_object Post do |post|
posts << post
end
这几乎肯定是一个不好的想法,因为它也会加载之前请求中仍在内存中且尚未进行垃圾回收的Post实例。有可能存在更好的方式来获取您关心的文章,但我们需要更多关于您正在尝试做什么的信息。展示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
@@instance_collector
会被更新吗? - Vijay