2024 年 Clojure 状态调查!分享您的看法。

欢迎!请查看关于页面以了解更多关于这个工作方式的信息。

+9
语法和读取器

whereas
- clojure.core/read 和 clojure.edn/read 需要一个 PushbackReader;
- clojure.java.io/reader 生成一个 BufferedReader,这是不兼容的;
- 这种风险已经让众人困惑了多年(链接:1);
- clojure.java.io 实际上只是一个简单的糖果(并且增加一点不会造成损害);
- clojure.java.io 的存在本身就表明其适用性和适用性(其中由于缺乏可读取的 pushback-reader 而不足);

i.e.,在没有 clojure.java.io 的情况下,似乎“不必”使用 clojure.edn,但在 clojure.java.io 和其“reader”函数存在的情况下,在 API 中看似很多部分都是可以搭配的,仍让人觉得做错了;

and
- 将“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 消息线程

5 回答

0

评论者:davidrupp

附加补丁 drupp-clj-1611.patch 实现了所要求的 clojure.java.io/pushback_reader。

0

评论者:davidrupp

请注意,您始终可以导入java.io.PushbackReader并自行执行类似(PushbackReader. (reader my-thing))的操作;修复补丁实际上只做了这么多。

0

评论者:pbwolf

clojure.java.io/reader是幂等的,而2015年1月10日的修复补丁重新包装现有的PushbackReader两次:首先与新的BufferedReader包装,然后与新的PushbackReader包装。

不修改给定的PushbackReader更符合clojure.java.io的模式。

它还需要一个文档字符串。如果pushback-reader是幂等的,文档字符串的开放语句可以呼应clojure.java.io/reader的,例如:尝试将它的参数强制转换为java.io.PushbackReader;如果失败,(等等等等)。

0

评论者:davidrupp

添加drupp-clj-1611-2.patch以处理之前的评论。

0
参考:https://clojure.atlassian.net/browse/CLJ-1611 (由alex+import报告)
...