2013-03-04 16 views
5

Tôi đã thử mã này từ this dẫn:quả sẽ được gửi để an ủi thay vì REPL khi sử dụng bài trong Eclipse/ngược chiều kim đồng

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

Khi tôi thực hiện nó, một phần của đầu ra xuất hiện trong REPL, và phần khác xuất hiện trong giao diện điều khiển (bật lên vì tôi thường ẩn nó vì tôi không sử dụng nó).

Tôi muốn gửi tất cả đầu ra đến cửa sổ REPL, làm thế nào tôi có thể đạt được điều đó?

Trả lời

6

Đó là vì *out* không bị ràng buộc đối với người viết REPL trong chuỗi mới. Bạn có thể liên kết theo cách thủ công:

(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")) 
Các vấn đề liên quan