5

このガイドからこのコードを試しました:

(defn my-fn [ms]
  (println "entered my-fn")
  (Thread/sleep ms)
  (println "leaving my-fn"))

(let [thread (Thread. #(my-fn 1))]
  (.start thread)
  (println "started thread")
  (while (.isAlive thread)
    (print ".")
    (flush))
  (println "thread stopped"))

実行すると、出力の一部が REPL に表示され、残りの部分がコンソールに表示されます (使用しないため、通常は非表示にしているのでポップアップします)。

すべての出力を REPL ウィンドウに送信したいのですが、どうすればそれを達成できますか?

4

1 に答える 1

6

これ*out*は、新しいスレッドで REPL ライターにバインドされていないためです。手動でバインドできます:

(let [thread (let [out *out*] 
               (Thread. #(binding [*out* out] 
                           (my-fn 1))))]
  (.start thread)
  (println "started thread")
  (while (.isAlive thread)
    (print ".")
    (flush))
  (println "thread stopped"))
于 2013-03-04T09:18:48.347 に答える