Зачем вам создавать модуль из блока?
Вопрос
Я смотрел на эту строку:
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, что делает код более читабельным.
Не связан с StackOverflow