更新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开头)。