Ruby是否提供显示调用层次结构的方法?

15

我想查看哪些类继承了一个固定的类。Ruby中是否有此方法?

Aptana提供了显示此选项,但是否有其他方法?

谢谢

2个回答

25

您是要查看一个类的所有祖先,还是后代?对于祖先,请使用:

Class.ancestors

然而,对于子类,没有可比较的“开箱即用”方法。 但是,您可以使用下面的ObjectSpace方法,但它很慢,并且可能在Ruby实现之间不可移植:

ObjectSpace.each_object(Class) do |klass| 
  p klass if klass < StandardError
end

编辑:

还可以使用Class#inherited钩子来跟踪子类化。但是,这不会捕获在定义跟踪功能之前创建的任何子类,因此可能不适合您的用例。但是,如果您需要以编程方式在应用程序内定义的类上使用该信息,则可以选择此方法。


6

Module#ancestors

示例:

class Foo
end

class Bar < Foo
end

Bar.ancestors # => [Bar, Foo, Object, Kernel]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接