因为 clojure.core/pr-str 使用 with-out-str 来捕获 pr 的输出(而 pr 不能被解析为一个可写的东西——它仅使用 out)。
如果您对懒加载数据的结果执行 pr-str,则可以使用 println 将副作用写入标准输出并与输出混杂。例如,在我的案例中,我从库 criterium 中提取基准测试并尝试将数据结构打印到文件中。解决方案将是提供一个重载的 pr/pr-str,它接受一个写入器。
这当您尝试在 EDN 中持久化程序输出时是一个难看的错误,因为随机掺杂的标准输出消息使得数据无效,不能被 read-string 解析。我们不应该需要函数是纯的才能使 pr-str 按预期工作。
我省略了一个补丁,因为我虽然认为修复很简单,但我不确定它应该在哪个位置(例如,使 pr-on 公开,更改 pr,更改 pr-str)。