请在2024 Cloujure状态调查!中分享您的想法。

欢迎!请查看关于页面以获取更多关于如何使用此功能的信息。

+9
语法和读取器

鉴于
- 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 的消息线程

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](https://clojure.atlassian.net/browse/CLJ-1611) (由 alex+import 报告)
...