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
È stato utile?

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