考虑 clojure repl 中的以下代码序列
(def elems (atom {}))
(swap! elems assoc 42 [:a 7])
elems
产生预期{42 [:a 7]}
。现在试试
(compare-and-set! elems elems (atom {}))
生产false
,意味着compare-and-set!
操作没有成功。我很惊讶,因为我期望elems
测试与elems
内部compare-and-set!
操作相同。我知道我可以reset!
用来完成无条件重置原子的目标,但我想知道为什么compare-and-set!
不完全一样?