Выведите "System.out.println" в REPL Emacs Cider (или другой буфер)
Я использую Java
библиотека в Clojure
, Он выводит много вещей прямо на консоль, используя System.out.println
,
Я использую последний Cider с Emacs. Я начинаю Сидр с cider-jack-in
, Тем не менее, я вижу эти результаты. Я думал, что они будут скопированы в буфер nrepl-сервера, но это не так.
Я тоже пытался бежать (alter-var-root #'*out* (constantly *out*))
в REPL, но безуспешно.
Чего мне не хватает в том, как это нужно сделать, если это вообще можно сделать.
1 ответ
Вам необходимо заменить java.io.PrintStream
назначен на System.out
с тем, который будет пересылать все clojure.core/*out*
(который является примером java.io.PrintWriter
). Для этого вам нужно создать адаптер из PrintStream
в PrintWriter
, Я не нашел существующего в Java SDK API, но есть в Apache Commons IO (или вы можете реализовать его самостоятельно):
(import (java.io PrintStream)
(org.apache.commons.io.output WriterOutputStream))
(-> *out*
(WriterOutputStream.)
(PrintStream.)
(System/setOut))
С этого момента, когда вы звоните System.out.println
где-нибудь в вашей JVM вывод будет передан clojure.core/*out*
,