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
Foi útil?

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
scroll top