Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling Java from Clojure

When I try to run the following code (from the REPL) in Clojure:

(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)

What am I doing wrong here?

like image 460
Paul Reiners Avatar asked Dec 04 '08 22:12

Paul Reiners


2 Answers

Your code works for me using the latest 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]

Are you using the September 16 release? You almost have to use the SVN version of Clojure. It's changing way too fast.

like image 79
Brian Carper Avatar answered Sep 28 '22 07:09

Brian Carper


I think you mean "Calling Java from Clojure". They are still fiddling with the syntax.

like image 43
Julien Chastang Avatar answered Sep 28 '22 06:09

Julien Chastang