Зачем вам делать модуль из блока? - PullRequest
1 голос
/ 10 сентября 2009

Я смотрел на эту строку:

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

Кажется, создается новый модуль и добавляется его в массив.

Зачем вам собирать модуль из блока? Блок может быть чем угодно, и тогда массив расширений станет непредсказуемым.

Редактировать: это из базового класса Синатры:

  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

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

Код в блоке не более «непредсказуем», чем код в модуле, созданный без использования блока. Пишу ли я

module Foo
  def foo() "bar" end
end

или

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

Я получаю тот же эффект. Оба позволяют расширить функциональность другого класса, что является целью этого метода.

0 голосов
/ 11 сентября 2009

В этом случае он позволяет передавать блок & внутри oneliner, что делает код более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...