Dynamic Clojure中的动态原子
我刚接触Clojure,对动态原子有点困惑。我想我了解动态绑定和原子的用例。但我经常看到这样的定义Dynamic Clojure中的动态原子,dynamic,clojure,binding,Dynamic,Clojure,Binding,我刚接触Clojure,对动态原子有点困惑。我想我了解动态绑定和原子的用例。但我经常看到这样的定义 (def ^:dynamic *variable* (atom nil)) 动态原子的用途是什么?动态变量用于共享线程内的状态。原子代表可能发生变化的变量。因此,包含atom的动态变量对于每个线程的作用域为且可能更改的状态非常有用。例如,可以方便地在HTTP处理程序中使用每个请求的数据。当然,您可以只使用动态变量和set它是一堆,因为您不需要跨线程进行协调。但是我们有比VAR更好的操作原子的功能
(def ^:dynamic *variable* (atom nil))
动态原子的用途是什么?动态变量用于共享线程内的状态。原子代表可能发生变化的变量。因此,包含atom的动态变量对于每个线程的作用域为且可能更改的状态非常有用。例如,可以方便地在HTTP处理程序中使用每个请求的数据。当然,您可以只使用动态变量和
set代码>它是一堆,因为您不需要跨线程进行协调。但是我们有比VAR更好的操作原子的功能,所以人们经常这样做。我也是一个新手,使用Clojure 1.10,它似乎是set动态全局变量(线程或绑定
范围之外)上的code>有问题。引用自:“目前,尝试使用set!设置var的根绑定是一个错误,即var分配是线程本地的。”我不明白的是,如果在任何情况下使用atom
,为什么它仍然标记为^:dynamic
?@fr13d您将使用绑定建立每个线程的初始值,没有设置代码>,然后在该线程上使用交换进一步对其进行变异代码>。