Вывод отправляется на консоль вместо REPL при использовании потоков в Eclipse/CounterClockWise

Я попробовал этот код из этого руководства:

(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, как мне этого добиться?

1 ответ

Решение

Это потому что *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"))
Другие вопросы по тегам