因为clojure.core/pr-str使用with-out-str来捕获pr的输出(pr不能被解析成可写的对象 - 只使用out)。
如果你将某些惰性结果pr-str,你可以通过println将其与输出混合来获取写入标准输出的副作用。例如,在我这个例子中,我从库criterium提取基准,并尝试将数据结构打印到文件。解决方案将是为pr/pr-str提供一个接受写入器的重载。我注意到pr-on提供了一些功能,但它只是私有的。
当你试图在EDN中持久化程序输出时,这是一个丑陋的bug,因为随机插入的标准输出信息使得它对read-string无效。我们不应当需要在pr-str按预期工作的情况下使我们的函数纯洁。
我省略了一个补丁,因为我虽然认为修复很直接,但不确认应该在哪里(例如,将pr-on设为公开,更改pr,更改pr-str)。