使用set更新Clojure中的线程局部绑定!没有发生?

时间:2012-06-15 07:20:24

标签: clojure

我正在尝试使用set!来修改var的线程局部绑定 - 但这些更改似乎没有生效。请考虑以下事项:

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

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

1 个答案:

答案 0 :(得分:2)

您的doto语法错误。

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

请注意额外的parens。