2024 年 Clojure 状态调查中分享您的观点!

欢迎!请访问关于页面以了解更多有关如何使用本网站的信息。

+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 中其他许多其他易用性非常好的功能中,还是觉得做错了;

并且
- 修订“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报告)
...