我怎样才能获得所有定义的类?

时间:2013-04-06 15:09:17

标签: ruby

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

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] 

3 个答案:

答案 0 :(得分:5)

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

ObjectSpace.each_object(Class)

答案 1 :(得分:2)

除了ObjectSpace之外,您可以定义的智能钩子方法是inherited,Ruby每次将其类子类化时都会调用它。

class A
  @sub_classes = []

  def self.inherited(sub_class)
    @sub_classes << sub_class
  end
end

答案 2 :(得分:1)

p ObjectSpace.each_object(Class){|ob| p ob}