我想要類似下面的東西,但希望它可以重用於不同的類。如何創建一個存儲實例的類?
我該如何重構這段代碼,只需要很少的努力就可以將它包含在一個類中,並且每當有新的被調用時,這個類將自動收集實例?
我已經嘗試了各種各樣的重寫新的或初始化的東西,但不能得到發生的魔法。
class Person
@@people_instances = []
def initialize
@@people_instances << self
end
def self.instances
@@people_instances
end
end
People.new
People.new
Poople.instances
=> [#<Person:0x000001071a7e28>, #<Person:0x000001071a3828>]
經過一些反饋後,我不認爲答案是把實例放在一個類變量中,因爲它將永遠留在內存中。 Rails緩存也不太適合,因爲我不需要實例持久化。
以下代碼使用類實例變量而不是類變量。
http://www.dzone.com/snippets/class-variables-vs-class
class Employee
class << self; attr_accessor :instances; end
def store
self.class.instances ||= []
self.class.instances << self
end
def initialize name
@name = name
end
end
class Overhead < Employee; end
class Programmer < Employee; end
Overhead.new('Martin').store
Overhead.new('Roy').store
Programmer.new('Erik').store
puts Overhead.instances.size # => 2
puts Programmer.instances.size # => 1
將這些實例變量是唯一每個rails請求,否則將繼續存在?
我從那開始,但我讀到,你可能會得到尚未GC'd的舊對象。任何人都可以確認嗎? – Tim
是的,那是可能的。你想做什麼?你爲什麼想要訪問這些實例?如果你解釋**你想要做什麼,然後可能會有更好的**如何**,那就簡單多了。 –
這是否意味着如果我使用帶有Passenger的Rails,新連接將共享實例或者是等同於啓動另一個進程的新連接? – Tim