2012-10-17 17 views
5

Possible Duplicate:
Look up all descendants of a class in RubyCome controllare tutte le classi sotto o usando una classe?

Quindi, diciamo che abbiamo:

class LivingBeing 
    class Animal 
    end 

    class Bacteria 
    end 

    class Virus 
    end 
end 

class Fungi < LivingBeing 
end 

Come posso controllare quello che sottoclassi LivingBeing ha? So che abbiamo Klass.ancestors ma qual è il metodo per vedere il contrario degli antenati?

+2

'opposto == sottoclassi degli antenati –

+1

La risposta che stai cercando è qui http://stackoverflow.com/questions/2393697/look-up-all-descendants-of-a-class-in-ruby Credo che ... domanda interessante anche se. – clementine

+0

Un'altra soluzione è quella di definire incluso nella classe base e registrarlo ogni volta che qualcuno lo sottoclasse. – DGM

risposta

3

Non c'è nulla di costruito nel linguaggio di base di Ruby che farà ciò che vuoi - dovrai scriverne uno tuo. Ecco un metodo di esempio subclasses_of(class_name_here) (sotto) che restituirà un elenco di sottoclassi di una classe particolare per voi:

class Mammal 
end 

class Human < Mammal 
end 

class Dog < Mammal 
end 

def subclasses_of input 
    ObjectSpace.each_object(Class).select { |klass| klass < input } 
end 

subclasses_of(Mammal) 
#=> [Human, Dog] 

Btw, non c'è una risposta a questa domanda qui:

http://dzone.com/snippets/objectsubclasses

+0

Esiste un metodo di sottoclassi per la classe. 'Mammal.subclasses' dà' [Human, Dog] ' –

+0

Dove? Ho provato quanto segue: '> Mammal.subclasses NoMethodError: Metodo 'sottoclassi' indefiniti degli Mammifero: Classe \t da (IRB): 44 \t da /Users/nat/.rvm/rubies/ruby-1.9.3-p194/bin/irb: 16: in '

' '. Anche qui non si fa menzione: http://rdoc.info/stdlib/core/Module o qui: http://rdoc.info/stdlib/core/Class –

+0

Ah, capisco ... è una cosa di binari: http://rdoc.info/gems/activesupport/Class#subclasses-instance_method –

Problemi correlati