2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解有关如何使用本站的一些更多信息。

+9
语法和reader

其中
- 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 群组中进行了讨论

(2014,“clojure.edn wo...

...ll accept clojure.java.io/reader?”)https://groups.google.com/forum/#!topic/clojure/3HSoA12v5nc

并引用了一个较早的线程

(2009,“从reader中读取...”)https://groups.google.com/forum/#!topic/clojure/_tuypjr2M_A

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 报告)
...