Pregunta

Estaba mirando esta línea:

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

Parece crear un nuevo módulo y agregarlo a un arry.

¿Por qué construirías un módulo a partir de un bloque? El bloque podría ser cualquier cosa y luego la matriz de extensiones se vuelve impredecible.

Editar: Esto es de la clase 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
¿Fue útil?

Solución

El código en un bloque no es más " impredecible " que el código en un módulo hecho sin usar un bloque. Si escribo

module Foo
  def foo() "bar" end
end

o

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

Tengo el mismo efecto. Ambos le permiten ampliar la funcionalidad de otra clase, que es el propósito de este método.

Otros consejos

En este caso, le permite pasar un bloque & amp; dentro de oneliner, lo que hace que el código sea más legible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top