Gegeben eine ->>
-Pipeline wie folgt:
Ich möchte die verschiedenen Phasen an Bedingungen knüpfen.
Das erste, was mir in den Sinn kam, war folgendes:
%Vor% Wenn jedoch das ->>
-Makro versucht, in die if
-Form einzufügen, sieht dies nicht nur unglücklich in Bezug auf die Leistung aus (mit den Noop identity
-Aufrufen), sondern kann auch nicht kompiliert werden.
Was wäre eine angemessene, einigermaßen trockene Art, dies zu schreiben?
Moderne Clojure (ab 1.5) unterstützt eine Vielzahl von Optionen für bedingtes Threading.
as->
ist vielleicht das vielseitigste, indem es Ihnen einen Namen gibt, der sich auf das "Ding" bezieht "Durch die Formulare gefädelt werden. Zum Beispiel:
Dies ergibt eine erhebliche Flexibilität bei der Arbeit mit einer Mischung von Funktionen, die das Einfädeln des Ausdrucks an verschiedenen Punkten in der Parameterliste erfordern (das heißt, von - & gt; zu - & gt; & gt; -Syntax wechseln). Man sollte die Verwendung von extern benannten Variablen im Interesse der Lesbarkeit von Code vermeiden, aber oft ist dies der klarste und einfachste Weg, einen Prozess auszudrücken.
Es gibt auch cond->
, das nach einer Gruppe von Paaren fragt: einen Test und einen Ausdruck if Dieser Test wird als wahr ausgewertet. Das ist ziemlich ähnlich zu cond
, hört aber nicht beim ersten echten Test auf.
Sie können den kompilierenden Teil reparieren (nicht jedoch den asketischen Teil, indem Sie die if-Anweisung entscheiden, welche Funktion ausgeführt werden soll, indem Sie einen anderen Satz von ( )
wie folgt einfügen:
würde in eine Reihe von Aufrufen wie folgt expandieren:
%Vor%Eine allgemeinere Art zu gehen, wenn Sie so etwas oft brauchen:
%Vor%Tags und Links clojure