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

欢迎!请参阅关于页面了解有关如何操作的一些更多信息。

0
tools.reader

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

我基本上耸了耸肩,基本上这样回答:“因为rewrite-clj使用tools.reader”。我觉得有点过意不去,所以在这里提出了关于Ask Clojure的问题。

代表那位rewrite-clj用户,我提出以下问题

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

这样做有以下优点:换行符得到了规范,但这也意味着信息损失。

相关
之前我在一个关于Clojure tools reader如何规范Windows换行符的问题上提出意见

1 答案

0
by

“将所有换行符规范化”是什么意思?我不明白这个问题问的是什么。

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

我的理解是它使用“标准化换行”来描述

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

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

Rewrite-clj深入挖掘了tools.reader,比大多数用户更加深入。

它使用clojure.tools.reader.reader-types命名空间中的fns,如read-char、unread和peekchar。它采用这种方法返回高级读取器fns不返回的内容,如空白、注释和#_ :skipped-stuff。

因此,当rewrite-clj获取空白时,新行始终是\n(即使它们最初是\r\n)。
...