binding
動的変数、、、およびを混合する際の注意をアドバイスする、やや古いブログ投稿がいくつかありますpmap
。たとえば、ここでは、次のコードスニペットを取得します。
user=> (def *foo* 5)
#'user/*foo*
user=> (defn adder
[param]
(+ *foo* param))
#'user/adder
user=> (binding [*foo* 10]
(doseq [v (pmap adder (repeat 3 5))]
(println v)))
10
10
10
nil
しかし、それは私がそのコードを実行したときに起こることではありません(最初の行をに変更します(def ^:dynamic *foo* 5)
)。単純に予想されるように、(Clojure 1.4を使用して)出力として3つのsを取得15
します。つまり、pmapに渡された関数によって見られるバインディング形式の変更があります。スレッドローカルバインディングとpmapの相互作用の方法は変更されましたか?この文書はどこにも見つかりません。