我不確定你是否在談論訪問每個TumblrPost實例或每個TumblrPost子類。
如果您要訪問的每個實例,您可以設置在TumblrPost一個類的實例變量,並在構造函數中每一個新實例更新:
class TumblrPost
@all_instances = []
class << self
attr_accessor :all_instances
end
def initialize
TumblrPost.all_instances << self
end
end
TumblrTextPost = Class.new(TumblrPost)
t1 = TumblrPost.new
t2 = TumblrTextPost.new
puts TumblrPost.all_instances
如果,另一方面,你想成爲能夠迭代TumblrPost的每個子類,你可以使用繼承的鉤子來跟蹤它們。
class TumblrPost
@all_subclasses = []
class << self
attr_accessor :all_subclasses
end
def self.inherited(subclass)
@all_subclasses << subclass
end
end
TumblrTextPost = Class.new(TumblrPost)
puts TumblrPost.all_subclasses
來源:拉斯·奧爾森的Eloquent Ruby