有没有办法获取所有已定义类的列表。我正在寻找这样的代码:
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]
答案 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}