更新Clojure中的线程本地绑定已完成!没有发生?

更新Clojure中的线程本地绑定已完成!没有发生?,clojure,Clojure,我正在尝试使用set修改变量的线程本地绑定——但这些更改似乎没有生效。考虑以下事项: (def ^:dynamic *foo* :root) (binding [*foo* :thread-local] (let [val (doto :new #(set! *foo* %))] [val *foo*])) 我希望结果是[:new:new];相反,它的计算结果是[:new:thread local]。我在这里误解了什么?您的doto语法错误 (bind

我正在尝试使用
set
修改变量的线程本地绑定——但这些更改似乎没有生效。考虑以下事项:

(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*]))
请注意附加参数。

谢谢!(另外--看起来像set!返回值,因此doto完全不需要以.Heh开头)。