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

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

+17

刚刚看到Go 1.13版本新增了以下功能

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

我认为这是一个相当不错的特性。在编写大数字时,如92347683,如果不知道这是百万、十亿等,阅读和心智解析可能比较困难。我认为在读取器中添加这种分隔符语法将会是一个很好的补充。这不一定要用下划线,而且在考虑所有有效的Clojure数字文字时可能需要一些周(pd)调时间。

感谢

4个回答

+1

对此的反对意见可能是它可能会影响代码搜索。比如说你想在代码中搜索数字10000,你可能还需要搜索10_100,或者100_00等。

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

发表于
从Java 7开始确实如此,该版本加入了对下划线的支持以作为分隔符,我相信

https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
发表于
有人提出反对意见,认为这会影响解决原始字符串,可能带来微小的益处。任何让解析变难并增加边缘情况的东西基本上都会影响工具。
发表于
>> 这可能会影响代码的搜索。

告诉它关于namespaced/关键字语法和namespaced映射的例子。这确实会使数字文字更难搜索,但clojure根本就是不可搜索的。
+1
发表于

如果 clojure 读取器编写时存在此功能,我怀疑我们很可能会出于对称性而支持它。但现在我认为您需要权衡额外的有用性好处(据我所知,相当小)与“更新 Clojure 工具库中的每个读取器/解析器”,这肯定会跨生态系统投入大量工作。

0 投票

编辑

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

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

一旦添加,代码库可能会出现各种风格的混合,这会增加混乱和挫折感,需要开发团队和维护人员决定使用哪种数字格式。

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

将此作为编辑器功能的优点是,它可以根据需要配置使用的分隔符,例如_、. ,逗号和点对于货币值非常有用。

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

我更倾向于不在语言中包含此功能,并鼓励那些认为它有用的用户联系他们使用的编辑器维护者。

> 做这样的事情似乎是为了让人更容易解析数字,所以我觉得这更像是编辑器的功能,而不是语言本身。

通过将其推给编辑器,你现在需要完成的工作量是人们所使用的编辑器数量的倍数,同时还无法以纯文本(如在补丁或diff中)阅读代码。通过将其添加到语言本身,你完全跳过了所有额外的努力,并提供了对所有有益的一致且可理解的格式。

如果我们投票(我知道我们现在没有),我会投赞成票。
0 投票

在Emacs中,您可以使用这种辅助模式用颜色突出展示几千行的代码块:https://emacs.stackexchange.com/a/59343

...