4

だから私は最近Rubyを書き始めたばかりで、モジュールがどのように機能するかを理解している間、次の振る舞いは私を失望させます。

module ModuleA
    def a_greet
        'Hello from module A'
    end
end


module ModuleB
    def b_greet
        'Hello from module B'
    end
end


include ModuleA
include ModuleB

# WHY DOES THIS WORK !!!!!
p ModuleA.b_greet

モジュールの関数は指定せずにModule.呼び出すことができ、この方法でコードを記述したことはありませんが、ModuleAを明示的に指定するときにModuleBに含まれるメソッドを呼び出すことができる理由がわかりません。

4

1 に答える 1

7

待って、もっとあります:

"Why does this work?".b_greet # => "Hello from module B"

これらのモジュールをトップレベルのオブジェクトに含めていますmain。これは特別なオブジェクトです。その上で定義されたすべてのメソッドがすべてのオブジェクトで使用可能になります(上の行を参照してください。現在はb_greetメソッドがありますString)。ModuleAもオブジェクトであるため、を含めるModuleBと、ModuleAそのメソッドを取得します。これらのモジュールを通常のクラス/オブジェクトに含めると、この「共有」動作は得られません。

于 2013-02-23T13:10:10.107 に答える