clojure - Clojure 中线程本地绑定(bind)的更新通过 set 完成!没有发生?

标签 clojure

我正在尝试使用 set! 修改 var 的线程本地绑定(bind) - 但这些更改似乎没有生效。考虑以下因素:

(def ^:dynamic *foo* :root)
(binding [*foo* :thread-local]
  (let [val (doto :new
               #(set! *foo* %))]
    [val *foo*]))

我希望结果是[:new :new];相反,其计算结果为[:new :thread-local]。我在这里误解了什么?

最佳答案

您的 doto 语法错误。

(binding [*foo* :thread-local]
  (let [val (doto :new (#(set! *foo* %)))]
    [val *foo*]))

注意额外的括号。

关于clojure - Clojure 中线程本地绑定(bind)的更新通过 set 完成!没有发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046246/

相关文章:

clojure - 在 Clojure 中获取调用函数名称

ide - 选择用于 Clojure 编码的 IDE/编辑器

Clojure 引用项目是最新的吗?

clojure - 为什么这个循环函数比 map 慢?

recursion - 如何在没有尾递归的情况下在匿名 fn 中进行递归

powershell - Clojure 已安装,但 clj 失败

clojure - 用于在随机加权选择之间进行选择的惯用 Clojure

logging - 如何使用 core.async 在 Clojure 中写入日志文件?

java - clojure 中的 MySQL 枚举数据类型访问

Clojure 实例?单一参数