从Clojure函数中捕获打印的惯用方法是什么?

从Clojure函数中捕获打印的惯用方法是什么?,clojure,stdout,Clojure,Stdout,例如,函数将XML打印到*out*。我希望将此输出捕获为字符串。以下是REPL的典型用法: user> (prxml [:p "Test"]) <p>Test</p>nil 我编写了捕获输出函数,但我怀疑它存在类似的东西,只是我在或邮件列表中找不到它。我刚刚从Clojure中详细的XML处理中发现了不带str的 因此,我的示例的正确实现是: (def xml (with-out-str (prxml [:p "Test"]))) 更一般地说,如果您查看不带out

例如,函数将XML打印到*out*。我希望将此输出捕获为字符串。以下是REPL的典型用法:

user> (prxml [:p "Test"])
<p>Test</p>nil

我编写了捕获输出函数,但我怀疑它存在类似的东西,只是我在或邮件列表中找不到它。

我刚刚从Clojure中详细的XML处理中发现了不带str的

因此,我的示例的正确实现是:

(def xml (with-out-str (prxml [:p "Test"])))

更一般地说,如果您查看不带out str的
的源代码,您可以看到如何使用
绑定将
*out*
动态绑定到任何流。这适用于动态设置任何现有var的值

(def xml (with-out-str (prxml [:p "Test"])))