5

有没有办法获取所有已定义类的列表。我正在寻找这样的代码:

Class.instances.each do |klass|
  puts klass.name
end

如果没有办法做到这一点。是否可以定义一个类 A 使其后代在其中注册?例如以这种方式:

class A
  ...
end

class B < A
end

class C < B
end

A.descendants   # => [B, C] 
4

3 回答 3

5

ObjectSpace 可以帮助您获取一个类的所有实例。这将因此返回所有定义的类

ObjectSpace.each_object(Class)
于 2013-04-06T15:16:43.123 回答
3
p ObjectSpace.each_object(Class){|ob| p ob}
于 2013-04-06T15:17:41.833 回答
2

除了ObjectSpace,您可以定义的智能钩子方法是inherited,Ruby 将在其类被子类化时调用它。

class A
  @sub_classes = []

  def self.inherited(sub_class)
    @sub_classes << sub_class
  end
end
于 2013-04-06T15:20:19.683 回答