1

Javaでライブラリを使用していますClojure。を使用して、多くのことをコンソールに直接出力しSystem.out.printlnます。

Emacs で最新の Cider を使用しています。でサイダーを始めていcider-jack-inます。ただし、これらの出力は確認できます。それらはnrepl-serverバッファにコピーされると思っていましたが、そうではありません。

REPLでも実行しようとし(alter-var-root #'*out* (constantly *out*))ましたが、成功しませんでした。

それができるのであれば、これをどのように行うべきかについて何が欠けていますか。

4

1 に答える 1

2

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))

これ以降、JVM の任意の場所で呼び出すとSystem.out.println、出力が に渡されclojure.core/*out*ます。

于 2016-05-24T19:10:34.453 に答える