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如何处理\૪会很有用。

by
我认为Java解析不会将其视为数字,因此Clojure也可能不应该。
by
我对此有点惊讶,但

dev=> (Long/parseLong "૪")

4

dev=> (Long/parseLong "૪૪૪")

444
by
我在谈论Java代码中的数值字面量,它无法解析(JLS要求使用ascii数字0-9)。
0
by
...