【问题标题】:Clojure binding not workingClojure 绑定不起作用
【发布时间】:2009-10-21 06:25:51
【问题描述】:

我正在研究 Stuart Halloway 的“Programmming 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?

【问题讨论】:

  • 第二行好像有两个字符互换了。
  • 您使用的是什么 IDE/环境?什么版本的 Clojure?你的代码对我来说很好,来自 git 的最新 Clojure,从命令行运行。
  • Clojure-1.1.0-alpha-SNAPSHOT on Snow Leopard...我刚刚在我的 Windows PC 上尝试了 1.0.0 并且运行良好,所以它一定是那个版本的错误。有趣的是,这本书的作者建议您使用 Clojure 的捆绑版本,因为他在上面测试了他的所有示例......然后它不适用于该示例。
  • 在 Linux/1.1.0-alpha 上的行为相同,也许你应该在 groups.google.com/group/clojure 上询问这个问题

标签: binding jvm clojure


【解决方案1】:

结论:错误

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

如果您现在返回 Clojure d/l 页面,该版本似乎已被撤回,并且 1.0.0 是“精选”d/l。

在 1.0.0 中,您的示例确实绑定了 42。

【讨论】:

    【解决方案2】:

    关于相关说明:
    当您在另一个线程中运行代码时,以这种方式很容易被绑定咬伤。当我调用的函数通过pmap 而不是 map 当代码实际在线程池中的线程上执行时,我遇到了这样的问题。我相信代理商也会这样做。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 2013-12-15
      • 1970-01-01
      • 2013-02-26
      • 2018-08-27
      • 2011-10-02
      • 2018-11-07
      • 2017-11-02
      • 2011-12-25
      相关资源
      最近更新 更多