2009-10-19 17 views

cevap

22

tüm bir sınıfın atalarını veya kökenini görmek istiyorsun? ataları için kullanın:

Class.ancestors 

ancak torunları için "kutunun dışında" hayır karşılaştırılabilir bir yöntem yoktur. Aşağıdaki gibi ObjectSpace kullanabilirsiniz, ama yavaş ve Yakut uygulamaları üzerinden taşınabilir olmayabilir:

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

EDIT:

biri de subclassing izlemek için Class#inherited kanca kullanabilirsiniz. Bu, izleme işlevi tanımlanmadan önce oluşturulan alt sınıfları yakalamaz, ancak kullanım durumunuza uymayabilir. Ancak, bu bilgiyi programınızda tanımlanan sınıflarda programsal olarak kullanmanız gerekiyorsa, bunun yapılması yol olabilir.

+0

Çok teşekkürler! Tam olarak istediğim buydu! :) – flyer88

6

Module#ancestors

Örnek:

class Foo 
end 

class Bar < Foo 
end 

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

Çok teşekkürler Avdi! – flyer88