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

欢迎!请查看关于页面了解更多关于它如何工作的信息。

0
tools.reader

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

我基本上耸了耸肩,实际上回答道,“因为 rewrite-clj 正在使用 tools.reader”。因 为回答得太简短,我感到有点愧疚,所以在这里 Ask Clojure 上提出这个问题。

我代表那位 rewrite-clj 用户询问

  1. 是否是 tools.reader 预期的目标是 Normalize 所有 newline 为 \n? (我认为是这样)
  2. 应该吗?

最大的优点是 newline 被标准化,但这也意味着信息有所损失。

相关
之前我在 Clojure 工具读者关于如何标准化 Windows newline 的问题上提出了一个问题

1 答案

0

'标准化所有 newline' 意味着什么?我不明白这个问题的含义。

感谢您的回复!我在使用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)。
...