因为 clojure.core/pr-str 使用 with-out-str 来捕获 pr 的输出(pr 不能被解析为可写对象 - 只使用 out)。
如果您将懒加载结果 pr-str,则可以使用 println 在输出中添加副作用写至 stdout。例如,在我的情况下,我正在从 crateirum 库中提取基准测试并尝试将数据结构打印到文件。解决方案将是提供可接收 writer 的 pr/pr-str 重载。我注意到 pr-on 提供了一些功能,但它仍然是私有的。
这是一个试图在 EDN 中持久保存程序输出时的丑陋错误,因为随机穿插的 stdout 消息会使 read-string 无效。我们不应该因为 pr-str 的预期工作而需要我们的函数是纯的。
我省略了一个补丁,因为我虽然认为修复很简单,但我不确定它应该放在哪里(例如,使 pr-on 公开,更改 pr,更改 pr-str)。