Frage

Wie wir wissen, gibt es in Ruby 1.9 mehrere Möglichkeiten, Proc aufzurufen

 f =->n {[:hello, n]}
 p f[:ruby]       # => [:hello, :ruby]
 p f.call(:ruby)  # => [:hello, :ruby]
 p f.(:ruby)      # => [:hello, :ruby]
 p f === :ruby    # => [:hello, :ruby]

Ich bin neugierig, was ist eine „natürlichere“ Art, Proc aufzurufen?„Natürlich“ bedeutet wahrscheinlich eher Informatik-ähnliche Art und Weise.

War es hilfreich?

Lösung

Die zweite Option wird bei weitem am häufigsten verwendet.

p f.call(:ruby)  # => [:hello, :ruby]

Dadurch ähnelt es eher einer Standardmethode.Außerdem verlassen sich einige Bibliotheken tatsächlich auf Duck-Typing, wenn sie Argumente validieren und die Verfügbarkeit prüfen #call Methode.In diesem Fall mit #call Stellt sicher, dass Sie ein Lambda oder jedes andere Objekt (einschließlich einer Klasse) bereitstellen können, auf das reagiert wird #call.

Rack Middlewares sind ein gutes Beispiel für diese Konvention.Die grundlegende Middleware kann ein Lambda sein, oder Sie können mithilfe von Klassen komplexere Logik bereitstellen.

Andere Tipps

Ich benutze immer die Option 3. In Anbetracht der syntaktischen Mehrdeutigkeiten, Methoden ohne Klammern anrufen zu können, ist dies der nächstgelegene Methodenrufsyntax.

Ich habe die erste Art und Weise gesehen, die in Rack Quellcode verwendet wurde.Es verwirrte mich schon lange.Es wird von lib / rack / builder.rb ( version: 1.6.0.alpha )

ausgewählt generasacodicetagpre.

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