鉴于我要执行此操作
(def structure (atom [{:id "an-id"} {:id "another-id"}]))
(def job {:type "some-job"})
(reset! structure (map #(if (= "an-id" (:id %)) (update-in % [:performed-jobs] (fnil conj []) job) %) @structure))
next structure:
[{:id "an-id" :performed-jobs [{:type "some-job"}]} {:id "another-id"}]
我如何使用swap!更改我的结构中的单个事件而不是全部重置?
答案 0 :(得分:1)
reset!
替换为swap!
,为其提供一个获取atom
旧值的函数,并返回一个新值以存储在atom
中。将atom
的解除引用替换为函数的参数,即旧值。
(swap! structure
(fn [old]
(map #(if (= "an-id" (:id %))
(update-in % [:performed-jobs]
(fnil conj []) job) %)
old)))