2008-12-04 9 views
6

Khi tôi cố gắng chạy đoạn mã sau (từ REPL) trong Clojure:Calling Java từ Clojure

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

tôi nhận được lỗi sau:

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) 

Tôi đang làm gì sai ở đây?

Trả lời

5

Mã của bạn hoạt động cho tôi bằng SVN mới nhất (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] 

Bạn đang sử dụng bản phát hành ngày 16 tháng 9 chưa? Bạn hầu như phải sử dụng phiên bản SVN của Clojure. Nó đang thay đổi quá nhanh.