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

欢迎!请参阅 关于 页面,了解有关此页面的更多信息。

+17
语法和阅读器
编辑

刚看到Go 1.13版本添加了

数字分隔符:现在可以(分组)使用下划线分隔任何数字字面量,例如 1_000_000、0b_1010_0110 或 3.1415_9265。下划线可以出现在任意两个数字之间或字面量前缀与第一个数字之间。

我觉得这是个相当不错的功能。在编写大数字时,例如 92347683,如果不知道它是百万、十亿等,有时候阅读和理解起来可能会有点困难。如果有一种用于分隔的语法,我认为这对于阅读器来说是个很好的补充。它不必是下划线,而且在考虑所有有效的 Clojure 数字字面量时可能需要一些额外时间。

谢谢

4 个答案

+1

反对这种做法的一个论据是,它可能会影响代码的搜索。比如说,你想搜索代码中数字 10000 的位置,你可能还需要搜索 10_100,或者 100_00 等。

不确定这是否是重要的问题,不记得上一次我在代码库中搜索数字是什么时候,但仍然值得考虑。

这对于 Java 7 及之后的版本而言是正确的,因为 Java 7 引入了下划线作为分隔符

https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
对于添加原始字符串的反对意见类似于这一点:这可能也会使工具复杂化,而好处可能很小。任何使解析变得更困难且具有更多边缘情况的东西基本上都会影响工具。
> 这可能会影响代码搜索。

告诉它关于:namespaced/keyword 语法和namespaced maps。确实,这使数字文字不太容易查找,但Clojure 本身就不太容易查找。
+1

如果Clojure读取器编写时存在这样的功能,我认为我们很可能会为了兼容性而支持它。但现在我认为您必须权衡增加的实用性(在我看来,相当小)与“更新Clojure工具链中的每个读取器/解析器”的负担,这当然在整个生态系统范围内是一大堆工作。

0 投票

编辑

这样做的初衷似乎是为了让人更容易解析数字,因此我觉得这更像是编辑器的功能,而不是语言本身

将这样的改动添加到语言中会使数字的语法变得更加复杂,增加了所有工具正确处理的难度。因此,这会影响编辑器、LSP服务器、格式化工具、linters等,而不仅仅是Clojure读取器。

一旦添加,代码库很容易变成各种风格的混合,增加了混乱和挫折感,需要开发团队和维护人员花费时间决定使用哪种数字格式。

已经有编辑器功能可以显示带有花哨符号的lambda函数和部分。
许多编辑器还会着色十六进制颜色代码。
所有这些都不需要更改底层语言

将这个功能作为编辑器的特性有好处,它可以配置使用哪种分隔符,例如 _, .,逗号和点对于货币值很有用。

不更改底层语言,那么搜索和使用其他文本工具的能力将不受影响。

我宁愿不在语言中包含这个功能,并鼓励那些觉得这个功能有用的人联系他们使用的编辑器维护者。

> 这样做的初衷似乎是为了让人更容易解析数字,因此我觉得这更像是编辑器的功能,而不是语言本身

通过将其推向编辑器,你现在需要执行相当于人们使用的编辑器数量的工作量,此外,这还会使在纯文本(如补丁或diff)中阅读代码变得不可访问。通过将其添加到语言本身,你可以绕过所有额外的工作,并为所有人提供一个一致和易于理解的格式。

如果我们投票(我知道我们不会),我会投赞成票。
0 投票

在 Emacs 中,你可以尝试使用这个辅助模式以颜色突出显示千位数的块:https://emacs.stackexchange.com/a/59343

...