2009-10-19 5 views

答えて

22

あなたはすべてのクラスの祖先、または子孫を参照するように求めていますか?先祖のために、使用:

Class.ancestors 

全く同等の方法は、しかし、子孫のための「箱から出して」はありません。あなたは以下のように、オブジェクト・スペースを使用することができますが、それは遅いですし、Ruby実装間で移植できないことがあります。

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

EDIT:

一つでもサブクラス化を追跡するためにClass#inheritedフックを使用することができます。ただし、トラッキング機能が定義される前に作成されたサブクラスはキャッチされません。そのため、ユースケースに適合しない可能性があります。しかし、アプリケーション内で定義されたクラスでその情報をプログラムで使用する必要がある場合は、この方法が適しています。

+0

ありがとう!それはまさに私が望んでいたものでした! :) – flyer88

6

Module#ancestors

例:

class Foo 
end 

class Bar < Foo 
end 

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

ありがとうございますAvdi! – flyer88

関連する問題