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
...