我的一个朋友正在编写一个领域特定的语言(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,它应该能够将任何这些字符转换为数字,或者读取器应该允许它无法处理的“数字”成为符号。