假設我有一個名爲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