2012-10-17 18 views
5

Possible Duplicate:
Look up all descendants of a class in RubyBir sınıfın altındaki veya sınıfındaki tüm sınıflar nasıl kontrol edilir?

Yani, o zaman kalan varsayalım:

class LivingBeing 
    class Animal 
    end 

    class Bacteria 
    end 

    class Virus 
    end 
end 

class Fungi < LivingBeing 
end 

nasıl LivingBeing sahiptir alt sınıfların neyi kontrol ederim? Biliyorum ki Klass.ancestors var ama ataların tersini görme yöntemi nedir?

+2

'karşıt: Btw

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] 

, burada bu soruya bir cevap var ataların == alt sınıfları –

+1

Aradığınız cevabı buradadır http://stackoverflow.com/questions/2393697/look-up-all-descendants-of-a-class-in-ruby Bence ... ilginç soru gerçi. – clementine

+0

Başka bir çözüm, temel sınıfınızda bulunanları tanımlamak ve bir alt alta yazdığı her defasında kaydettirmektir. – DGM

cevap

3

İstediğiniz şeyi yapacak çekirdek Ruby dilinde yerleşik bir şey yok - kendiniz yazmanız gerekecek. İşte size belirli bir sınıfın alt sınıflarının listesini döndürür bir örnek yöntemi subclasses_of(class_name_here) (aşağıda) var: bir

http://dzone.com/snippets/objectsubclasses

+0

Sınıf için bir alt sınıf yöntemi vardır. 'Mammal.subclasses''' [İnsan, Köpek]' –

+0

Nerede verir? Aşağıdaki çalıştı: '> Mammal.subclasses NoMethodError: Memeli için tanımlanmamış bir yöntem 'alt sınıfları': Sınıf \t (IRB) den: 44 \t /Users/nat/.rvm/rubies/ruby-1.9.3-p194 dan/bin/irb: 16: '

' 'içinde. Burada ayrıca bahsedilmiyor: http://rdoc.info/stdlib/core/Module veya burada: http://rdoc.info/stdlib/core/Class –

+0

Ah, anlıyorum ki ... bu bir raylar şey: http://rdoc.info/gems/activesupport/Class#subclasses-instance_method –

İlgili konular