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