因为 clojure.core/pr-str 使用 with-out-str 捕获 pr 的输出(而 pr 无法被解析为可写的事物 - 只使用 out)。
如果您对某些惰性结果进行 pr-str,您可以使用 println 在输出中穿插副作用。例如,在我的情况下,我正在从库 criterium 提取基准,并尝试将数据结构打印到文件。解决方案是提供一个接受写入器的 pr/pr-str 重载。我注意到 pr-on 提供了一些功能,但它不是公开的。
这是一个在将程序输出持久化为 EDN 时令人烦恼的错误,因为随机穿插的 stdout 消息使其对 read-string 无效。我们不应需要我们的函数必须是纯的才能使 pr-str 如期工作。
我省略了一个修补程序,因为虽然我认为修复很简单,但我不确定它应该放在哪里(例如,使 pr-on 公开,更改 pr,更改 pr-str)。