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

欢迎!请访问 关于 页面,了解更多关于这个工作方式的信息。

0
tools.reader

问题
我是 rewrite-clj 的维护者。
Rewrite-clj 感谢使用 clojure tools.reader 解析Clojure源代码。
一个在Windows上工作的 rewrite-clj 用户最近 提出了一个问题,想知道为什么他的Windows \r\n 换行符被转换为 \n

我基本outuide了一下,实际上答复说:“因为 rewrite-clj 使用的是 tools.reader”。我觉得过于简慢,所以在这里Ask Clojure上提问。

代表那位rewrite-clj用户,我提问

  1. 是否 tools.reader 的意图是将所有换行符规范化为 \n?(我认为是这样的)
  2. 它应该这样做吗?

好处在于换行符得到了规范化,但这也意味着信息损失。

相关
以前,我曾 在Clojure工具读取器上提出一个问题,讨论它如何规范化Windows换行符

1 答案

0

“规范化所有换行符”意味着什么?我不明白这个问题的含义。

感谢您的回复!我正在使用在 Clojure 工具读取源代码中看到的语言。

我的理解是,它使用“正常化换行符”来描述

- `\r\n` 转换为 `\n`。
- (也许有点奇怪,它还会将 `\r\f` 转换为 `\n`)。

这意味着原始操作系统特定的换行符不可从工具读者解析结果中获得。
我想问的是 - tools.reader(以及 Clojure LispReader)本质上是关于从文本流中读取形式。空白符主要不在结果的形式中(因为空白符被删除),除了可能是字符串字面量。
哦,是的,这是个好主意!感谢您的耐心。

Rewrite-clj 比大多数用户更深入地研究 tools.reader。

它使用了 clojure.tools.reader.reader-types 命名空间,利用如 read-char、unread 和 peekchar 等函数。它采取了这种底层方法来返回高级读取函数不会返回的东西,如空白符、注释和 #_ :skipped-stuff。

因此,当 rewrite-clj 获取到空白符时,换行符总是 \n(即使它们最初是 \r\n)。
...