2009-09-10 2 views
1

Я смотрел на этой линии:Зачем вам делать модуль из блока?

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

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

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

Edit: Это не из базового класса Синатры:

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 
+0

Можете ли вы дать немного больше контекста? В какой библиотеке содержится эта строка кода? –

+0

Это из базового класса Sinatra. – uzo

ответ

3

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

module Foo 
    def foo() "bar" end 
end 

или

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

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

0

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

Смежные вопросы