2011-03-04 15 views
15

जब आप एक वर्ग या अन्य मॉड्यूल में मॉड्यूल शामिल आप मॉड्यूल की एक सूची शामिल पाने के लिएरूबी: विस्तारित मॉड्यूल की एक सूची प्राप्त करें?

@mymod.included_modules 

कॉल कर सकते हैं।

क्या मॉड्यूल को मॉड्यूल को सूचीबद्ध करने के लिए समकक्ष है?

module Feature1 
end 

module Feature2 
    extend Feature1 
end 

Feature2.extended_modules #=> [Feature1] 
+0

पूर्वजों का कार्य कुछ मदद – Orbit

उत्तर

17

वे वहाँ हो, तुम सिर्फ सही जगह में देखने के लिए है:

(class << Feature2; self end).included_modules # [Feature1, Kernel] 

हम इस तरह के सामान्यीकरण कर सकते हैं:

class Module 
    # Return any modules we +extend+ 
    def extended_modules 
    (class << self; self end).included_modules 
    end 
end 

# Now get those extended modules peculiar to Feature2 
Feature2.extended_modules - Module.extended_modules # [Feature1] 
+1

आह, हाँ हो सकता है। मुझे अब याद है। यह कुछ जर्मन नाम है जो इस से जुड़ा हुआ है। – Mario

+3

यह eigenclass –

+9

होगा मुझे लगता है कि समुदाय * सिंगलटन कक्षा * पर बस गया है। रुबी 1.9 में 'ऑब्जेक्ट # सिंगलटन_क्लास' विधि भी है जो ऑब्जेक्ट की सिंगलटन क्लास लौटाती है। इस काम का कारण यह है कि 'विस्तार' सचमुच सिर्फ 'singleton_class.include' है। –

18
Feature2.singleton_class.included_modules # => [Feature1, ...] 
+2

यह चयनित उत्तर होना चाहिए। – Aeramor

2

सभी रूबी मॉड्यूल हो सकता है सीएलआई (कमांड लाइन) से सूचीबद्ध, निम्नानुसार है:

ruby -e 'puts Gem::Specification.all().map{|g| [g.name, g.version.to_s] }' 

या

ruby -rubygems -e 'puts Gem::Specification.all().map{|g| [g.name, g.version.to_s] }' 

आशा इस कुछ हद तक मदद करता है !!!

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