2

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

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

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

4

1 回答 1

2

你的doto语法是错误的。

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

注意额外的括号。

于 2012-06-15T07:37:27.490 回答