0

なぜこのようなモジュールが与えられたのですか?

module TestModule
  module Configuration
    # Return the configuration values set in this module
    def options
      puts "OPTIONS IS IN"
      puts self.inspect
    end
  end
end

optionsメソッドがConfigurationではなくTestModuleにあることがわかりますか?

編集:私が見ている宝石と、私にこの混乱を与えた宝石を追加します:

次のファイルを確認してください:37行目のconfiguration.rb options メソッドが定義されています。

ただし、クラスClientでは、オプションが呼び出されると(11行目)、構成の代わりにAwesomeを実行するために使用されます。何故ですか?これらのモジュールが混在しているAwesomeという名前のクラスはありません。

4

2 に答える 2

0

問題の宝石は(awesome.rbで)します

module Awesome
  extend Configuration
end

したがって、上のすべてのメソッドAwesome::Configuration(など)は、モジュールoptions上のシングルトンメソッドになりますAwesome

于 2012-08-11T23:57:22.390 に答える
0

技術的には、どちらの一部でもありません。クラスの一部にするには、クラスにミックスインする必要があります。モジュール上で直接呼び出し可能にするにself.は、定義内でプレフィックスを付けて、インスタンスメソッドではなくモジュールメソッドにする必要があります。

def self.options
  self #=> TestModule::Configuration
end

インスタンスメソッドを使用できるミックスインに関する優れたチュートリアルは次のとおりです。http://rubylearning.com/satishtalim/modules_mixins.html

于 2012-08-11T23:14:47.933 に答える