从Clojure调用Java

6
当我尝试在Clojure的REPL中运行以下代码时:
(dotimes [i 5]
  (.start
   (Thread.
    (fn []
      (Thread/sleep (rand 1000))
      (println (format "Finished %d on %s" i (Thread/currentThread)))))))

I get the following error:

java.lang.Exception: Unable to resolve symbol: i in this context
clojure.lang.Compiler$CompilerException: NO_SOURCE_FILE:6: Unable to resolve symbol: i in this context
        at clojure.lang.Compiler.analyze(Compiler.java:3713)

我在这里做错了什么?
2个回答

5

使用最新的SVN(1144),您的代码对我有效。

user> (dotimes [i 5] (.start (Thread. (fn [] (Thread/sleep (rand 1000)) (println (format "Finished %d on %s" i (Thread/currentThread)))))))

Finished 0 on Thread[Thread-16,5,main]
Finished 4 on Thread[Thread-20,5,main]
Finished 3 on Thread[Thread-19,5,main]
Finished 1 on Thread[Thread-17,5,main]
Finished 2 on Thread[Thread-18,5,main]

您是否正在使用9月16日发布的版本?您几乎必须使用Clojure的SVN版本。它变化得太快了。


2
我认为你的意思是“从Clojure调用Java”。他们仍在修改语法。请参考此链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接