1

我正在Java使用Clojure. 它确实使用 . 将许多内容直接输出到控制台System.out.println

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

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

如果可以做到的话,我应该如何做到这一点我缺少什么。

4

1 回答 1

2

您需要将java.io.PrintStream分配给替换为System.out将所有内容转发到clojure.core/*out*(这是 的一个实例java.io.PrintWriter)的对象。为此,您必须从 to 创建一个PrintStream适配器PrintWriter。我在 Java SDK API 中没有找到现有的 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*.

于 2016-05-24T19:10:34.453 回答