我正在尝试使用set!
来修改var的线程局部绑定 - 但这些更改似乎没有生效。请考虑以下事项:
(def ^:dynamic *foo* :root)
(binding [*foo* :thread-local]
(let [val (doto :new
#(set! *foo* %))]
[val *foo*]))
我希望结果为[:new :new]
;相反,这评估为[:new :thread-local]
。我在这里误解了什么?
答案 0 :(得分:2)
您的doto
语法错误。
(binding [*foo* :thread-local]
(let [val (doto :new (#(set! *foo* %)))]
[val *foo*]))
请注意额外的parens。