2009-10-19 18 views

Répondre

22

Demandez-vous de voir tous les ancêtres d'une classe, ou les descendants? Pour ancêtres, utilisez:

Class.ancestors 

Il n'y a pas de méthode comparable « de la boîte » pour les descendants, cependant. Vous pouvez utiliser ObjectSpace, comme ci-dessous, mais il est lent et ne peut être portable sur les implémentations Ruby:

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

EDIT:

On peut également utiliser le crochet Class#inherited pour suivre subclassing. Cela n'attrape pas les sous-classes créées avant que la fonctionnalité de suivi ne soit définie, elle ne correspond donc pas à votre cas d'utilisation. Si vous avez besoin d'utiliser cette information par programme sur les classes définies dans votre application, cependant, cela peut être le chemin à parcourir.

+0

Merci beaucoup! C'était exactement ce que je voulais! :) – flyer88

6

Module#ancestors

Exemple:

class Foo 
end 

class Bar < Foo 
end 

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

Merci beaucoup Avdi! – flyer88