考虑到
- 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”函数存在的情况下,在API中还有许多其他符合条件的东西,人们仍然觉得自己在做错事情;
并且
- 已考虑将“读取”函数修改为自行生成Pushback,但已被拒绝(链接:2);
因此建议添加clojure.java.io/pushback-reader,返回可以被clojure.core/read和clojure.edn/read消费的内容。
(链接:1) 这件事在Google Groups上有所讨论
(2014年,"clojure.edn won't accept 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 的消息线程