Ich versuche, ein paar Funktionen in Clojure der Kette:Wie mehrere Funktionen verketten?
(f4 (f3 (f2 (f1 foo))))
Gibt es eine bequeme Syntax Zucker für das? Etwas wie:
(with-all-of-them foo f1 f2 f3 f4)
Ich versuche, ein paar Funktionen in Clojure der Kette:Wie mehrere Funktionen verketten?
(f4 (f3 (f2 (f1 foo))))
Gibt es eine bequeme Syntax Zucker für das? Etwas wie:
(with-all-of-them foo f1 f2 f3 f4)
Verwenden ->
Makro.
(-> foo f1 f2 f3 f4)
Oder reduce
:
(reduce #(%2 %1) foo [f1 f2 f3 f4])
Der 'reduce' Trick ist süß, nur wenn ein bisschen barock :) – vemv
@vemv Ich denke das' -> 'ist niedlich. Die 'reduce'-Option zeigt deutlich das Betriebsmuster und ist, im Gegensatz zum Threading-Makro, glücklich, eine zur Kompilierungszeit unbekannte Sequenz zu übernehmen. –
Es gibt eine threading macro ->
:
(-> foo f1 f2 f3 f4)
Neben Figwheel das ist wirklich das großartigste was ich heute gesehen habe. –
Eigentlich Ihre Beschreibung von with-all-of-them
-comp
ganz in der Nähe ist, außer dass comp
gibt eine Funktion, die Sie selbst nennen müssen:
(f4 (f3 (f2 (f1 foo))))
== ((comp f4 f3 f2 f1) foo)
Also, with-all-of-them
könnte im sein plementiert wie folgt:
(defn with-all-of-them [arg & fs]
((apply comp fs) arg))
meinst du comp? –
siehe http://stackoverflow.com/questions/11918554/can-clojure-evaluate-a-chain-of-mixed-arity-functions-and-return-a-partial-funct und sehen, ob das Ihnen hilft –