clojureでアローマクロを試してみる
"->"をアローマクロと呼ぶのか分からないけど、他の呼び方が分からないので、とりあえずそう呼ぶ。
アローマクロを使ってマップに値を追加する方法
以下のように使用する。
user=> (-> {} (assoc :a 1)) {:a 1} user=> (-> {} (assoc :a 1) (assoc :b 2)) {:b 2, :a 1} user=> (-> {} (assoc :a 1) (assoc :b 2) (assoc :c 3)) {:c 3, :b 2, :a 1}
動きとしては以下と同じ。
user=> (assoc {} :a 1) {:a 1} user=> (assoc (assoc {} :a 1) :b 2) {:b 2, :a 1} user=> (assoc (assoc (assoc {} :a 1) :b 2) :c 3) {:c 3, :b 2, :a 1}
アローマクロを使ってリストに値を追加する方法
マップだけじゃなく、リストにも使えます。意味あるか分かりませんが。
user=> (-> () (conj 1)) (1) user=> (-> () (conj 1) (conj 2)) (2 1) user=> (-> () (conj 1) (conj 2) (conj 3)) (3 2 1)
アローマクロを使ってベクタに値を追加する方法
リストに出来てベクタに出来ないことは無いだろうと言うことで。
user=> (-> [] (conj 1)) [1] user=> (-> [] (conj 1) (conj 2)) [1 2] user=> (-> [] (conj 1) (conj 2) (conj 3)) [1 2 3]
リストとベクタで順番が逆なのは面白いです。
この辺りは後でもう少し調べてみようかな。