在原子中存储/交换关键字是否更容易/更惯用?
(def a (atom :a))
(defn change-a [new-kw] (swap! a (fn [_] new-kw)))
还没有用例,只是想知道。我完全有可能错过一些东西,这种事情不应该发生/永远不会在野外发生,因为[其他一些模式]是一个更好的解决方案。
答案 0 :(得分:2)
原子可以交换(CAS)或重置为不同的值。交换是通过修改功能完成的,例如:
user=> (swap! (atom 41) inc)
42
请注意,交换时,原子的先前(例如当前)值将被计入计数。
Reseting原子的值完成“而不考虑当前值”:
user=> (reset! (atom 41) 42)
42
在您的情况下,它可以用作:
(reset! a :b)
如果你想重置保持CAS语义的原子的值,你可以compare-and-set!:
user=> (def a (atom 41))
#'user/a
user=> (compare-and-set! a @a 42)
true
user=> @a
42