因为 clojure.core/pr-str 使用 with-out-str 来捕获 pr 的输出(而 pr 不能被解析为可写的东西 - 只使用 out)。
如果 pr-str 了一个延迟结果,你可以通过 println 结合输出,来获取写入 stdout 的副作用。例如,在我使用库 criterium 提取基准并尝试将数据结构打印到文件的情况下。解决方案是提供一个接受 writer 的 pr/pr-str 重的载版本。请注意,pr-on 提供了一些功能,但它是以私有形式提供的。
这是一个在尝试将程序输出持久化到 EDN 时的丑陋错误,因为随机间隔的 stdout 消息使 read-string 无效。我们不应该需要我们的函数是纯净的才能使 pr-str 如预期那样工作。
我省略了一个补丁,因为虽然我认为修复很直接,但我不确定修复应该放在哪里(例如:使 pr-on 公开,改变 pr,改变 pr-str)