有没有办法获取所有已定义类的列表。我正在寻找这样的代码:
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]
有没有办法获取所有已定义类的列表。我正在寻找这样的代码:
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]
ObjectSpace 可以帮助您获取一个类的所有实例。这将因此返回所有定义的类
ObjectSpace.each_object(Class)
p ObjectSpace.each_object(Class){|ob| p ob}
除了ObjectSpace
,您可以定义的智能钩子方法是inherited
,Ruby 将在其类被子类化时调用它。
class A
@sub_classes = []
def self.inherited(sub_class)
@sub_classes << sub_class
end
end