2010-08-15 12 views
17

रूबी में कक्षा पदानुक्रम में किसी विशिष्ट श्रेणी में शामिल मॉड्यूल को आप कैसे सूचीबद्ध करेंगे? कुछ इस तरह:आप रूबी क्लास में मॉड्यूल को कैसे सूचीबद्ध करते हैं?

module SomeModule 
end 

class ParentModel < Object 
    include SomeModule 
end 

class ChildModel < ParentModel 
end 

p ChildModel.included_modules #=> [SomeModule] 
p ChildModel.included_modules(false) #=> [] 

लिस्टिंग पूर्वजों मॉड्यूल पेड़ में उच्च दिखाई देता है:

p ChildModel.ancestors #=> [ChildModel, ParentModel, SomeModule, Object, Kernel] 

उत्तर

16

जहाँ तक मुझे अपने प्रश्न को समझने के रूप में, कुछ इस तरह आप के लिए क्या देख रहे है:

class Class 
    def mixin_ancestors(include_ancestors=true) 
    ancestors.take_while {|a| include_ancestors || a != superclass }. 
    select {|ancestor| ancestor.instance_of?(Module) } 
    end 
end 

हालांकि, मैं आपके टेस्टकेस को पूरी तरह से समझ नहीं पा रहा हूं: SomeModuleChildModel के एक मॉड्यूल के रूप में सूचीबद्ध क्यों है, भले ही वास्तव में ChildModel में शामिल है लेकिन ParentModel में? और इसके विपरीत, Kernel क्यों शामिल मॉड्यूल के रूप में सूचीबद्ध नहीं है, भले ही यह पूर्वजों की श्रृंखला में SomeModule के रूप में उतना ही है? और विधि के लिए बुलियन तर्क क्या है?

(ध्यान दें कि बूलियन तर्क हमेशा बुरा डिजाइन कर रहे हैं:। एक विधि वास्तव में एक बात क्या करना चाहिए यह एक बूलियन तर्क लेता है, यह परिभाषा के द्वारा दो बातें, एक अगर तर्क सही है, एक और है करता है तर्क गलत है। या, यदि यह केवल एक चीज करता है, तो इसका मतलब यह हो सकता है कि यह इसके तर्क को अनदेखा करता है, जिस स्थिति में इसे शुरू करने के लिए नहीं लेना चाहिए।)

+0

मैं मूल पोस्टर नहीं हूं, लेकिन मुझे लगता है कि मैं आपके प्रश्न का उत्तर दोबारा कर सकता हूं: बूलियन तर्क। लांस इस '.cluded_modules' विधि को' # विधियों ', '# public_methods' और रूबी में अन्य समान तरीकों से व्यवहार करने की अपेक्षा कर रहा है। उन पर, एक 'सत्य' मान का अर्थ है "मुझे उन तरीकों को दिखाएं जो इस वस्तु को अपनी कक्षा से प्राप्त कर चुके हैं, जो उनके पूर्वजों के वर्गों से प्राप्त हुए हैं और मॉड्यूल शामिल हैं"। एक झूठा मूल्य इन अतिरिक्त तरीकों को वापस नहीं करता है। – pablobm

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