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中还有许多其他符合条件的东西,人们仍然觉得自己在做错事情;

并且
- 已考虑将“读取”函数修改为自行生成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;如果没有成功,(bla bla bla)。

0

评论者:davidrupp

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

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