2011-03-04 7 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] 

私たちは、このように一般化することができます:すべてのRubyのモジュールをすることができ

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] }' 

が、これはある程度お役に立てば幸いです!

関連する問題