我正在研究Stuart Halloway“编程Clojure”中的Clojure示例,并且在使用绑定时遇到了麻烦:
(def foo 10)
; => '#user/foo
foo
; => 10
(binding [foo 42] foo)
; => 10
(binding [user/foo 42] foo)
; => 10
(binding [user/foo 42] (var-get #'user/foo))
; => 10
为什么不给我42?
答案 0 :(得分:3)
这似乎是1.1.0-alpha-SNAPSHOT中的一个错误,它在Linux上也是可重现的。
如果你现在回到Clojure d / l页面,该版本似乎已被撤销,1.0.0是“精选”d / l。
在1.0.0中你的例子确实绑定了42。
答案 1 :(得分:1)
在相关说明中:
当你在另一个线程中运行代码时,它很容易被这种方式绑定。当代码实际在线程池的线程上执行时,当我调用的函数通过pmap
而不是 map
计算某些内容时,我遇到了类似这样的问题。我相信代理人也会这样做。