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ş: