wie Elogent darauf hinweist, dass das Makro die Argumente falsch platziert. In der Regel, wenn die Arbeit mit Makros (und Schreiben von ihnen vor allem) es hilft über macroexpand-1
und kombinieren es mit clojure.pprint/pprint
zu wissen, eine klare Sicht zu bekommen, was läuft eigentlich:
user> (clojure.pprint/pprint
(macroexpand-1
'(-> (* x y)
str
seq
(map str))))
(map (seq (str (* x y))) str)
nil
Was wir nicht recht sehen aussehen Recht. Also das nächste Geige wir mit ihm, bis er sich ausdehnt, was wir erwarten:
user> (clojure.pprint/pprint
(macroexpand-1
'(->> (* x y)
str
seq
(map str))))
(map str (seq (str (* x y))))
nil
Es gibt eine Vielzahl von Threading-Makros sind mit Situationen wie dieser zu helfen, vor allem as->
, die Sie mit dem Gewinde Wert geben einen expliziten Namen können, wenn Sie müssen Funktionen einzufädeln, die das erste und das letzte Argument für den wichtigen Beitrag bei abwechselnder Verwendung:
user> (as-> (* 7 42) x
(str x)
(seq x)
(map str x))
("2" "9" "4")
Sehr nützlich, danke für den Tipp! – jeemar