8

私は CodeSchool の RubyBits を使って作業していますが、理解できない演習に行き着きました。含まれているメソッドを使用するには、LibraryUtils の self.included メソッドを使用してください。"

module LibraryLoader

  extend ActiveSupport::Concern

  module ClassMethods
    def load_game_list
    end
  end
end

module LibraryUtils
  def self.included(base)
    base.load_game_list
  end
end

class AtariLibrary
  include LibraryLoader
  include LibraryUtils
end

ソリューション(以下)に基づいてActiveSupport::Concern、依存関係のロードを処理していないようです-LibraryUtils内にLibraryLoaderを含める必要があります。

何が行われているのか、なぜ両方のモジュールでActiveSupport::Concernそれを呼び出す必要があるのか​​ を理解するのを手伝ってもらえますか?extend

module LibraryLoader
  extend ActiveSupport::Concern

  module ClassMethods
    def load_game_list
    end
  end
end

module LibraryUtils
  extend ActiveSupport::Concern
  include LibraryLoader

  #result of refactoring the self.included method
  included do
    load_game_list
  end
end

class AtariLibrary
  include LibraryUtils
end

ありがとう!

4

1 に答える 1

7

呼び出すextend ActiveSupport::Concernと、ClassMethods 内部モジュールが検索され、それを使用して「ホスト」クラスが拡張されます。次にincluded、ブロックを渡すことができるメソッドを提供します。

included do
 some_function
end

メソッドはincluded、含まれているクラスのコンテキスト内で実行されます。別のモジュールで関数を必要とするモジュールがある場合、ActiveSupport::Concernが依存関係を処理します。

于 2013-07-15T18:02:35.813 に答える