Clojure swap atom with map values
我想
我可以这样做:
1 2 3 | (defonce config (atom {})) (swap! config assoc :a"Aaa") (swap! config assoc :b"Bbb") |
但是它是重复的,并且多次调用
我想做这样的事情:
1 2 3 4 | (swap! config assoc {:a"Aaa" :b"Bbb"}) ;; this doesn't work : ;; Exception in thread"main" clojure.lang.ArityException: Wrong number of args (2) passed to: core$assoc |
我该怎么做?
请参阅
的文档
1 2 3 4 5 6 7 8 9 | => (doc assoc) ------------------------- clojure.core/assoc ([map key val] [map key val & kvs]) assoc[iate]. When applied to a map, returns a new map of the same (hashed/sorted) type, that contains the mapping of key(s) to val(s). When applied to a vector, returns a new vector that contains val at index. Note - index must be <= (count vector). nil |
1 2 3 4 5 6 | user=> (assoc {} :a 1 :b 2) {:a 1, :b 2} user=> (let [x (atom {})] #_=> (swap! x assoc :a 1 :b 2) #_=> x) #object[clojure.lang.Atom 0x227513c5 {:status :ready, :val {:a 1, :b 2}}] |
顺便说一句,您应该始终将对原子的更新隔离到单个
N.B。
1 2 3 4 5 6 | user=> (merge {} {:a 1 :b 1}) {:a 1, :b 1} user=> (let [x (atom {})] #_=> (swap! x merge {:a 1 :b 2}) #_=> x) #object[clojure.lang.Atom 0x1be09e1b {:status :ready, :val {:a 1, :b 2}}] |