Frage

Ich war auf der Suche auf dieser Linie:

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

Es scheint ein neues Modul zu erstellen und fügen Sie es zu einem arry.

Warum werden Sie ein Modul aus einem Block obwohl bauen? Der Block könnte alles sein und dann die Erweiterungen Array wird unberechenbar.

Edit: Das ist von Sinatras Basisklasse:

  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
War es hilfreich?

Lösung

Der Code in einem Block ist nicht mehr „unberechenbar“ als der Code in einem Modul hergestellt, ohne einen Block zu verwenden. Ob ich schreibe

module Foo
  def foo() "bar" end
end

oder

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

Ich bekomme die gleiche Wirkung. Beide ermöglichen es Ihnen, eine andere Klasse der Funktionalität zu erweitern, in dem der Zweck dieses Verfahrens ist.

Andere Tipps

In diesem Fall ist es Ihnen ein & Block innerhalb oneliner passieren läßt, der Code besser lesbar macht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top