Clojure绑定不起作用

时间:2009-10-21 06:25:52

标签: binding jvm clojure

我正在研究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?

2 个答案:

答案 0 :(得分:3)

判决:bug

这似乎是1.1.0-alpha-SNAPSHOT中的一个错误,它在Linux上也是可重现的。

如果你现在回到Clojure d / l页面,该版本似乎已被撤销,1.0.0是“精选”d / l。

在1.0.0中你的例子确实绑定了42。

答案 1 :(得分:1)

在相关说明中:
 当你在另一个线程中运行代码时,它很容易被这种方式绑定。当代码实际在线程池的线程上执行时,当我调用的函数通过pmap而不是 map 计算某些内容时,我遇到了类似这样的问题。我相信代理人也会这样做。