として、Elogentはマクロが引数を間違った場所に置いていると指摘しています。私たちが見ることができる
user> (clojure.pprint/pprint
(macroexpand-1
'(-> (* x y)
str
seq
(map str))))
(map (seq (str (* x y))) str)
nil
はかなり見ていません。一般的には、マクロでの作業(特にそれらを書く)ときは約macroexpand-1
を知っているし、実際に実行されているもののクリアな視界を得るためにclojure.pprint/pprint
とそれを組み合わせるのに役立ちます右。それは我々が期待するものに展開されるまで、だから、次の我々はそれをいじる:
user> (clojure.pprint/pprint
(macroexpand-1
'(->> (* x y)
str
seq
(map str))))
(map str (seq (str (* x y))))
nil
ときあなたは、ねじ値に明示的な名前を与えることができます。このような状況を支援するためにマクロをスレッドの様々な、特にas->
があります。重要な入力のための最初と最後の引数を使って代替機能をスレッド化する必要があります。ここでは
user> (as-> (* 7 42) x
(str x)
(seq x)
(map str x))
("2" "9" "4")
非常に便利です、チップのおかげで! – jeemar