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

欢迎!有关如何使用本网站的更多信息,请参阅关于页面。

+17
语法和读取器
编辑

刚刚看到Go 1.13更新中增加了

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

我认为这是一个相当不错的特性。当编写大数字时,例如92347683,如果不知道这是百万、十亿等,那么在心理上阅读和分解可能就很困难。 having a syntax for separation我觉得会给读取器提供一个很好的补充。这不一定是下划线,并且有可能在考虑所有有效的Clojure数字字面量时需要一些时间。

谢谢

4个回答

+1

对此有所反驳的观点可能是它可能影响代码的搜索。比如说你想在代码中搜索数字10000所在的位置,你可能需要搜索10_100也可能需要搜索100_00等。

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

从Java 7开始,我相信作为分隔符下划线就被添加进去了。

https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
反对这种做法的一个类似论据是,在添加原始字符串时提出,这可能会使工具复杂化,可能带来小小的好处。任何使解析更困难且具有更多边缘情况的任何事情都可能影响工具。
> 这可能会影响代码搜索。

告诉 ::namespaced/keyword 语法和命名空间映射。确实,这会使得数字文字难以使用 grep(一种文本搜索工具),但是 Clojure 已经无法使用 grep。
+1

如果 Clojure 读者在那时存在,我认为我们很可能已经支持它以达到一致性。但现在我认为你必须权衡额外实用性的好处(在我看来,相当小)以及“更新 Clojure 工具中每个读者/解析器的更新”,这将肯定跨越整个生态系统的大量工作。

0

编辑了

这样做似乎是为了让人类更易于解析数字,因此在我看来这更像是一个编辑器的特性,而不是语言本身。

将此类更改添加到语言中会使数字的语法更复杂,所有工具处理正确都需要加倍的工作。因此,这将影响编辑器、LSP 服务器、格式工具、linters 等。所以这个改变不仅限于 Clojure 读取器。

一旦添加,代码库可能会轻松地成为不同风格的混合体,这会增加困惑和挫折,需要开发团队和维护者决定使用哪种数字格式。

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

将此作为编辑器特性的好处是可以根据需要配置分隔符,例如 _ 、 。逗号和点对于货币值非常有用。

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

我宁愿不将此特性包含在语言中,并鼓励那些认为它有用的用户联系他们使用的编辑工具的维护者。

> 做这样的事情似乎是为了让人类更易于解析数字,因此在我看来这更像是一个编辑器的特性,而不是语言本身。

将这推到编辑器中,您现在需要与人们使用的编辑器数量相符的工作,这不仅让以纯文本的形式阅读代码(例如在补丁或 diff 中)变得难以访问,而且通过在语言本身中添加更改,完全绕过所有额外的劳动,并为所有人提供一个一致且易于理解的格式。

如果我们真的要投票(我知道我们不会),我将支持。
0
by

在 Emacs 中,您可以尝试使用此微模式以颜色突出数千的块:[链接](https://emacs.stackexchange.com/a/59343)

...