2009-10-19 9 views

Respuesta

22

¿Estás preguntando para ver todos los antepasados ​​de una clase, o los descendientes? Por antepasados, utilice:

Class.ancestors 

no hay un método comparable "fuera de la caja" para los descendientes, sin embargo. Puede utilizar ObjectSpace, como abajo, pero es lenta y puede no ser portable a través de implementaciones de Ruby:

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

EDIT:

También se puede usar el gancho Class#inherited para realizar un seguimiento de subclases. Sin embargo, esto no detectará ninguna subclase creada antes de que se defina la funcionalidad de seguimiento, por lo que es posible que no se ajuste a su caso de uso. Sin embargo, si necesita utilizar esa información programáticamente en clases definidas dentro de su aplicación, este puede ser el camino a seguir.

+0

¡Muchas gracias! ¡Eso era exactamente lo que quería! :) – flyer88

6

Module#ancestors

Ejemplo:

class Foo 
end 

class Bar < Foo 
end 

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

Muchas gracias Avdi! – flyer88

Cuestiones relacionadas