2024年8月11日日曜日

clojureのthreading macroで関数を定義して使う場合は括弧を重ねて記述する


clojureには関数を連なって処理するための表現としてthreading macroが提供されています。
この表記を使うと呼び出す順序で関数を並べられるので処理の流れが分かりやすくなります。
(-> [1 2 3]
(conj 4)
(conj 5))
[1 2 3 4 5]

threadingマクロの中で即時関数を定義して使う場合は()を重ねます。
print関数を呼んで処理内容を確認するときや、「->」(第一引数に渡す処理)と「->>」(最後の引数に渡す処理)の切り替えを一時的に行いたいときに便利です。
(-> [1 2 3]
(conj 4)
((fn [x] (println x) x))
(#(filter odd? %))
((fn [x] (println x) x))
(#(into [] %))
((fn [x] (println x) x))
(conj 5))
[1 2 3 4]
(1 3)
[1 3]
[1 3 5]

必要な度に調べ直しているので記事として情報を残します。

参考
Debugging thread macro -> or ->> in Clojure

0 件のコメント :