2

varのスレッドローカルバインディングを変更するために使用しようとしてset!いますが、これらの変更は有効になっていないようです。次のことを考慮してください。

(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 に答える