in Clojure

Clojure – Clojure Cider REPL에서 쓰래드를 사용하였을 때 print 되지 않는 이유와 해결 방법

참고 링크

Q> Emacs Cider REPL에서 백그라운드 쓰레드에서 println을 돌렸을 때 왜 출력이 되지 않는가?

A> 원인은 출력되는 버퍼가 다르기 때문이다.

println의 행동은 동적으로 *out* 라는 output stream에 바인딩 되어 출력되는데, 만약 thread를 사용한다면, 그 thread는 루트 *out* 에 바인딩 될것이고, 그렇게 되면 사용하고 있는 REPL에서는 확인을 할 수 없다.

그러면 어디서 확인할 수 있는가?

buffer list에서 *nrepl-server*라는 이름을 가진 버퍼에서 확인 할 수 있다.

또는

(alter-var-root #'*out* (constantly *out*))

와 같이 바꾸어 기존 buffer에서 확인 할 수 있다.

참고 링크

만약 Cider REPL을 사용하지 않는다면, nrepl을 시작한 터미널에서 확인 할 수 있다.

Write a Comment

Comment