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

时间:2009-12-03 12:28:14

标签: clojure stdout

例如, prxml 函数将XML打印到* out *。我想将此输出捕获为String。以下是REPL的典型用法:

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

我喜欢这样做:

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

我编写了 capture-out 函数,但我怀疑它存在类似的东西,只是我在API或邮件列表中找不到它。

2 个答案:

答案 0 :(得分:6)

我刚从Clojure中的great blog post详细说明XML处理中发现了 with-out-str

所以我的例子的正确实现是:

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

答案 1 :(得分:6)

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