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

发布于 2024-08-13 11:34:13 字数 468 浏览 5 评论 0原文

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

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

我宁愿这样做:

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

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

For example, the prxml function prints XML to *out*. I would like to instead capture this output as a String. Here is the typical usage from a REPL:

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

I'd instead like to do:

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

I made up the capture-out function, but I suspect something like it exists, only I'm having trouble finding it in the API or mailing list.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

零崎曲识 2024-08-20 11:34:14

我刚刚从这个 精彩的博客文章详细介绍了 Clojure 中的 XML 处理。

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

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

I just discovered the with-out-str from this great blog post detailing XML processing in Clojure.

So the correct implementation of my example is:

(def xml (with-out-str (prxml [:p "Test"])))
左秋 2024-08-20 11:34:14

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

More generally, if you look at the source for with-out-str you can see how to dynamically bind *out* to any stream using binding. This works for dynamically setting the value of any existing var.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文