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

欢迎!请注意查看关于页面以了解有关此内容的更多信息。

+1
语法和读取器
重新标记

我的一个朋友正在编写一个领域特定语言(DSL),并希望将字符 ૪ 用作其记法的一部分。如果您尝试在Clojure中将此字符用作符号的一部分,您会得到以下错误:

user=> (read-string "૪")
Execution error (NumberFormatException) at user/eval5 (REPL:1).
Invalid number: ૪
user=>

此错误的原因似乎是:

user=> (Character/isDigit \૪)
true
user=>

此字符是古吉拉特语中的数字,因此Java的Character/isDigit返回true,因此Clojure读取器试图将其解析为数字,但它只能处理阿拉伯数字(以及可能十六进制数字)。

似乎如果读取器将依赖于Character/isDigit,它应该能够将这些字符中的任何一个转换为数字,或者读取器应该允许它不知道如何处理的“数字”成为符号。

2个答案

0

普遍而言,Clojure的意图是在很大程度上与Java相似,因此查看Java如何处理\૪可能会有所帮助。

我认为Java解析不会将其视为数字,因此Clojure可能也不应该如此。
对此我略感惊讶,但

dev=> (Long/parseLong "૪")

4

dev=> (Long/parseLong "૪૪૪")

444
我在谈论Java代码中的数值字面量,这将无法进行解析(JLS要求ASCII数字0-9)。
0
...