2009-10-19 14 views

Odpowiedz

22

Pytasz, aby zobaczyć wszystkich przodków klasy lub potomków? W przypadku przodków użyj:

Class.ancestors 

Nie ma jednak porównywalnej metody "wyjęciu z pudełka" dla potomków. Można użyć ObjectSpace, jak poniżej, ale jest powolne i nie mogą być przenoszone na terenie implementacje Ruby:

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

EDIT:

Można również użyć haka Class#inherited śledzić podklasy. Nie spowoduje to przechwycenia żadnych podklas utworzonych przed zdefiniowaniem funkcji śledzenia, więc może nie pasować do Twojego przypadku użycia. Jeśli chcesz użyć tych informacji programowo na zajęciach zdefiniowanych w aplikacji, może to być droga.

+0

Wielkie dzięki! Właśnie tego chciałem! :) – flyer88

6

Module#ancestors

Przykład:

class Foo 
end 

class Bar < Foo 
end 

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

Wielkie dzięki Avdi! – flyer88

Powiązane problemy