将“System.out.println”输出到Emacs Cider的REPL(或其他缓冲区)

时间:2016-05-24 12:49:15

标签: emacs clojure cider

我在Java中使用了Clojure库。它使用System.out.println直接向控制台输出许多内容。

我正在使用最新的Cider和Emacs。我正在用cider-jack-in开始Cider。但是,我可以看到这些输出。我以为它们会被复制到 nrepl-server 缓冲区,但事实并非如此。

我还尝试在REPL中运行(alter-var-root #'*out* (constantly *out*)),但没有成功。

如果可以完成,我在如何做到这一点上缺少什么。

1 个答案:

答案 0 :(得分:1)

您需要将分配给ages = [10,23,13,18,12]的{​​{1}}替换为将所有内容转发给java.io.PrintStreamSystem.out的实例)的clojure.core/*out*。为此,您必须创建从java.io.PrintWriterPrintStream的适配器。我没有在Java SDK API中找到现有的,但在Apache Commons IO中有一个(或者您可以自己实现):

PrintWriter

从现在开始,当您在JVM中的任何地方调用(import (java.io PrintStream) (org.apache.commons.io.output WriterOutputStream)) (-> *out* (WriterOutputStream.) (PrintStream.) (System/setOut)) 时,输出将传递给System.out.println