2009-10-19 9 views
15

यह सब कुछ है, मैं देखना चाहता हूं कि कौन से चरण एक निश्चित वर्ग को प्राप्त करते हैं। रूबी में इसके लिए एक विधि है?क्या रूबी पदानुक्रम कॉल दिखाने के लिए एक तरीका प्रदान करता है?

Aptana एक विकल्प प्रदान करता है जो यह दिखाता है, लेकिन क्या कोई तरीका है?

धन्यवाद

उत्तर

22

आप एक वर्ग के सभी पूर्वजों, या वंश को देखने के लिए पूछ रहे हैं? पूर्वजों के लिए, का उपयोग करें:

Class.ancestors 

, कोई तुलनीय विधि वंशजों के लिए "बॉक्स से बाहर" वहाँ है, तथापि। तुम्हें पता है, ObjectSpace उपयोग कर सकते हैं नीचे के रूप में है, लेकिन यह धीमी है और रूबी कार्यान्वयन भर में पोर्टेबल नहीं हो सकता है:

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

संपादित करें:

एक भी उपवर्गीकरण ट्रैक करने के लिए Class#inherited हुक का उपयोग कर सकते हैं। यह ट्रैकिंग कार्यक्षमता परिभाषित होने से पहले बनाए गए किसी भी उप-वर्ग को नहीं पकड़ेगा, हालांकि, यह आपके उपयोग के मामले में फिट नहीं हो सकता है। यदि आपको अपने आवेदन के अंदर परिभाषित कक्षाओं पर प्रोग्रामेटिक रूप से उस जानकारी का उपयोग करने की आवश्यकता है, हालांकि, यह जाने का तरीका हो सकता है।

+0

बहुत बहुत धन्यवाद! वही था जो मैं चाहता था! :) – flyer88

6

Module#ancestors

उदाहरण:

class Foo 
end 

class Bar < Foo 
end 

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

बहुत बहुत धन्यवाद Avdi! – flyer88

संबंधित मुद्दे