解决方法
你是要求看到一个阶级的所有祖先,还是后裔?对于祖先,使用:
Class.ancestors
然而,对于后代来说,没有类似的方法“开箱即用”.您可以使用ObjectSpace,如下所示,但是速度很慢,并且可能在Ruby实现中不可移植:
ObjectSpace.each_object(Class) do |klass| p klass if klass < StandardError end
编辑:
还可以使用Class#inherited挂钩跟踪子类化.这不会捕获在定义跟踪功能之前创建的任何子类,但是它可能不符合您的用例.但是,如果您需要以编程方式在应用程序中定义的类上使用该信息,那么这可能是要走的路.