¿Por qué harías un módulo a partir de un bloque?
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
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