我想将值附加到Clojure原子中的列表中:
(def thing (atom {:queue '()}))
我知道当它不是原子时,我可以这样做:
(concat '(1 2) '(3))
如何将其转换为交换!命令?
注意:我问了一个涉及地图的类似问题:Using swap to MERGE (append to) a nested map in a Clojure atom?
答案 0 :(得分:8)
user=> (def thing (atom {:queue '()}))
#'user/thing
user=> (swap! thing update-in [:queue] concat (list 1))
{:queue (1)}
user=> (swap! thing update-in [:queue] concat (list 2))
{:queue (1 2)}
user=> (swap! thing update-in [:queue] concat (list 3))
{:queue (1 2 3)}
答案 1 :(得分:3)
如果你自己编写fn,那么它应该是副作用,因为它可能会调用几次。
(def thing (atom {:queue '()}))
(swap! thing (fn [c]
(update-in c [:queue] concat '(1 2 3 3))))