Por que você iria fazer um módulo a partir de um bloco?
Pergunta
Eu estava olhando para esta linha:
extensions << Module.new(&block) if block_given?
Parece para criar um novo módulo e adicioná-lo a um Arry.
Por que você iria construir um módulo de um bloco embora? O bloco pode ser qualquer coisa e, em seguida, a matriz extensões se torna imprevisível.
Edit: Isto é de classe base de 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
Solução
O código em um bloco não é mais "imprevisível" do que o código em um módulo feito sem o uso de um bloco. Se I write
module Foo
def foo() "bar" end
end
ou
Foo = Module.new do
def foo() "bar" end
end
Eu obter o mesmo efeito. Ambos permitem que você estender a funcionalidade de outra classe, que é o propósito deste método.
Outras dicas
Neste caso, ele permite que você passe a & bloco dentro oneliner, o que torna o código mais legível.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow