然而
- 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 中其他许多其他易用性非常好的功能中,还是觉得做错了;
并且
- 修订“read”函数以使其自己的 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 年的消息线程