質問
この行を見ていました:
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を渡すことができるため、コードが読みやすくなります。
所属していません StackOverflow