在原子中持有关键字

时间:2014-07-15 20:05:33

标签: clojure

在原子中存储/交换关键字是否更容易/更惯用?

(def a (atom :a))
(defn change-a [new-kw] (swap! a (fn [_] new-kw)))

还没有用例,只是想知道。我完全有可能错过一些东西,这种事情不应该发生/永远不会在野外发生,因为[其他一些模式]是一个更好的解决方案。

1 个答案:

答案 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