我的一个朋友正在编写一个领域特定语言,并想在他的记号中使用字符“૪”。如果您试图将此字符作为符号的一部分在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,那么它应该能够将任何这些字符转换为数字,或者读取器应该允许它不知道如何处理的“数字”为符号。