質問

この行を見ていました:

    extensions << Module.new(&block) if block_given?

新しいモジュールを作成し、arryに追加するようです。

なぜブロックからモジュールを構築するのですか?ブロックは何でもかまいませんが、拡張配列は予測不能になります。

編集:これはシナトラの基本クラスからのものです:

  def register(*extensions, &block)
    extensions << Module.new(&block) if block_given?
    extensions.each do |extension|
      extend extension
      extension.registered(self) if extension.respond_to?(:registered)
    end
  end
役に立ちましたか?

解決

ブロック内のコードはもはや「予測不可能」ではありません。ブロックを使用せずに作成されたモジュール内のコードよりも。書くかどうか

module Foo
  def foo() "bar" end
end

または

Foo = Module.new do
  def foo() "bar" end
end

同じ効果が得られます。両方とも、このメソッドの目的である別のクラスの機能を拡張できます。

他のヒント

この場合、oneliner内で&amp; blockを渡すことができるため、コードが読みやすくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top