2014-12-15 14 views
6

Bir işlevi başlatan ve yürüten bu Clojure kodum var. Ben cider-jack-in ile yürütülen sümük repl modda (emacs'taki çalıştırmak AncakClojure iş parçacığı, Emacs clojure-repl modundaki sonuçları göstermiyor

(import [java.lang Thread]) 
(defn with-new-thread [f] 
    (.start (Thread. f))) 
(with-new-thread (fn [] (print "hi"))) 

, çıktısı şey yok, ama nil döndü. lein real ile

enter image description here

, bende beklenen çıkışı. yanlış olabilir ne

user=> (import [java.lang Thread]) 
java.lang.Thread 
user=> (defn with-new-thread [f] (.start (Thread. f))) 
#'user/with-new-thread 
user=> (with-new-thread (fn [] (print "hello\n"))) 
hello 
nil 

?

cevap

9

Bunun nedeni, CIDER/Emacs'deki ana iş parçacığının REPL çıkış arabelleğini *out* dinamik var. Bu yüzden emaclarda şeyleri görebilirsiniz.

Ancak yeni bir iş parçacığı başlattığınızda, bu bağlantı mevcut değil. Farklı bir iş parçacığı yazdırmak istediğinizde kullanımı, Şimdi

(def repl-out *out*) 
(defn prn-to-repl [& args] 
    (binding [*out* repl-out] 
    (apply prn args))) 

:

(prn-to-repl "hello") 

Ve bu kadar ilk bağlayıcı akımını yakalamak bir işlev oluşturmanız - Tespit yeterince basittir. Bu yardımcı olur umarım.

İlgili konular