如何将java runnable示例翻译为clojure

zca*_*ate 4 java clojure

关于如何从这个例子中翻译Runnable块,我有点困惑:

http://www.codejava.net/coding/capture-and-record-sound-into-wav-file-with-java-sound-api

    Thread stopper = new Thread(new Runnable() {
        public void run() {
            try {
                Thread.sleep(RECORD_TIME);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            recorder.finish();
        }
    });
Run Code Online (Sandbox Code Playgroud)

我困惑的代码是这样的:

   Runnable(){... public void run() {... }}
Run Code Online (Sandbox Code Playgroud)

ove*_*ink 8

值得注意的是,clojure函数实现了Runnable.

user=> (ancestors clojure.lang.AFn)
#{clojure.lang.IFn
  java.lang.Object
  java.lang.Runnable
  java.util.concurrent.Callable}
Run Code Online (Sandbox Code Playgroud)

所以你可以直接将fn传递给Thread构造函数.

(def stopper 
  (Thread.
    (fn []
      (try
        (Thread/sleep RECORD_TIME)
        (catch InterruptedException e
          (.printStackTrace e))))))
Run Code Online (Sandbox Code Playgroud)