java - 从 Clojure 调用 Java

标签 java clojure language-interoperability

当我尝试在 Clojure 中运行以下代码(来自 REPL)时:

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

我收到以下错误:

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)

我在这里做错了什么?

最佳答案

使用最新的 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 版本。变化太快了。

关于java - 从 Clojure 调用 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/342263/

相关文章:

java - 什么 "require"语句使用 Clojars 的 Java 库

java - 使用 Java 上的 Caffeine 在到期时执行操作

java - 在 Java 中发送 HTTP GET header

java - 从资源数组中获取 List<Integer>

java - 将文本排列到 JScrollPane 内的列中

java - Clojure - "Exception in thread "main“java.lang.ClassCastException : seesaw. core.proxy”

networking - Clojure:替代使用互斥锁/锁和计数器

c - 如何创建一个接口(interface)来为 fortran 转换 c 字符数组

c - Fortran `double precision` 与 C `double` 不同的任何平台?

ios - 在 Objective-C 中为 swift 类使用多参数 init 的语法