然而
- clojure.core/read 和 clojure.edn/read 需要 PushbackReader;
- clojure.java.io/reader 生成 BufferedReader,这不兼容;
- 这种危险已经让许多人困惑了许多年(链接:1);
- clojure.java.io 任何情况下都是纯糖(且不会被添加一点更多的东西所损害);
- clojure.java.io 的存在本身就表明了其适用性和使用适当性(其中由于缺乏兼容的读取器 pushback-reader,它有所欠缺);
即,在没有 clojure.java.io 的情况下,使用 clojure.edn 似乎并不“困难”,但在 clojure.java.io 及其“reader”函数存在的情况下, amidst API 中的其他许多内容(其中确实可以很好的搭配在一起),人们总是认为自己在做错事;
并且
- 修改“读取”函数以使它们自己的 Pushback 功能被认为是可行的并被否决了(链接:2);
因此建议添加 clojure.java.io/pushback_reader,以便返回可以由 clojure.core/read 和 clojure.edn/read 消费的东西。
(链接:1)该问题已在 Google Groups 上讨论
(2014年,“clojure.edn 不接受 clojure.java.io/reader?”) https://groups.google.com/forum/#!topic/clojure/3HSoA12v5nc
关于一个早期线程的引用
(2009年,“从读取器阅读...”) https://groups.google.com/forum/#!topic/clojure/_tuypjr2M_A
(链接:2)CLJ-82 和 2009 年的消息线程