Clojure 中的动态原子

Yur*_*ter 4 binding clojure dynamic

我是 Clojure 的新手,对动态原子有点困惑。我想我了解动态绑定和原子的用例。但我经常看到这样的定义

(def ^:dynamic *variable* (atom nil))
Run Code Online (Sandbox Code Playgroud)

动态原子的目的是什么?

ama*_*loy 7

动态变量用于在线程内共享状态。原子用于可能改变的变量。因此,包含原子的动态变量对于每个线程范围内且可能会更改的状态很有用。例如,在 HTTP 处理程序中使用每个请求的数据是很方便的。当然,你可以只使用一个动态变量和set!它一堆,因为你不需要跨线程协调。但是我们有更好的函数来操作原子而不是变量,所以人们经常这样做。