2011-03-04 108 views
15

當您在一個類或其它模塊的模塊,可以撥打Ruby:獲取擴展模塊的列表?

@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

這將是特徵類 –

+9

我認爲社區已經解決了*單身類*。 Ruby 1.9中甚至有一個'Object#singleton_class'方法返回一個對象的單例類。之所以這麼做,當然是因爲'extend'實際上就是'singleton_class.include'。 –

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

這應該是選定的答案。 – Aeramor

2

所有紅寶石模塊可列出從CLI(命令行),本身如下:

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

OR

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

希望這有助於在一定程度上!