Вопрос

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

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

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

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

Редактировать:Это из базового класса Sinatra:

  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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top