Perché dovresti creare un modulo da un blocco?
Domanda
Stavo guardando questa linea:
extensions << Module.new(&block) if block_given?
Sembra creare un nuovo modulo e aggiungerlo a un arry.
Perché dovresti costruire un modulo da un blocco però? Il blocco potrebbe essere qualsiasi cosa e quindi l'array di estensioni diventa imprevedibile.
Modifica: proviene dalla classe base di 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
Soluzione
Il codice in un blocco non è più "imprevedibile" rispetto al codice in un modulo realizzato senza utilizzare un blocco. Sia che scrivo
module Foo
def foo() "bar" end
end
o
Foo = Module.new do
def foo() "bar" end
end
Ottengo lo stesso effetto. Entrambi consentono di estendere le funzionalità di un'altra classe, che è lo scopo di questo metodo.
Altri suggerimenti
In questo caso ti consente di passare un blocco & amp; all'interno di oneliner, il che rende il codice più leggibile.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow