我的一个朋友正在编写一个 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,那么它应该能够将任何这些字符转换为数字,或者读取器应该允许“它不知道如何处理的数字”成为符号。