SORU
6 Mart 2010, CUMARTESİ


Ruby'de sınıf tüm torunları bak

Kolayca ruby'de sınıf hiyerarşisinde yükselmek istiyorum

String.ancestors     # [String, Enumerable, Comparable, Object, Kernel]
Enumerable.ancestors # [Enumerable]
Comparable.ancestors # [Comparable]
Object.ancestors     # [Object, Kernel]
Kernel.ancestors     # [Kernel]

Bu hiyerarşi de, gelmek için herhangi bir yolu var mı? Bunu yapmak istiyorum

Animal.descendants      # [Dog, Cat, Human, ...]
Dog.descendants         # [Labrador, GreatDane, Airedale, ...]
Enumerable.descendants  # [String, Array, ...]

ama descendants bir yöntem gibi görünmüyor.

(Bu soru geliyor çünkü istiyorum bulmak için tüm modeller bir Rails uygulaması ineceği bir temel sınıf ve liste onları; ben bir denetleyicisi ile çalışmak gibi herhangi bir model ve ben olmak isterim ekleyebilir yeni modeller kalmadan değiştir denetleyicisi.)

CEVAP
6 Mart 2010, CUMARTESİ


İşte bir örnek:

class Parent
  def self.descendants
    ObjectSpace.each_object(Class).select { |klass| klass < self }
  end
end

class Child < Parent
end

class GrandChild < Child
end

puts Parent.descendants
puts Child.descendants

Üst koyar.torunları verir:

GrandChild
Child

Çocuk koyar.torunları verir:

GrandChild

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNET

    CNET

    5 Mayıs 2006
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • michellefeng's channel

    michellefeng

    26 Kasım 2006

İLGİLİ SORU / CEVAPLAR