出了点问题
(def b [08])
java.lang.NullPointerException:null
但
(def b [8])
没问题
为什么?
答案 0 :(得分:7)
我对clojure一无所知,但在许多语言中,以零开头的整数文字被解释为octal(基数为8)。 8是无效的八进制数字。
来自Try Clojure的快速实验:
> (def b [08])
java.lang.NumberFormatException: Invalid number: 08
> (def b [07])
#'sandbox155/b
看来这确实是你的问题。
不要使用前导零(例如08
)启动整数,除非实际上打算使用八进制表示法。
答案 1 :(得分:2)
@Jonathon Reinhart是对的,根据LispReader.java :( https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/LispReader.java#L65):
static Pattern intPat =
Pattern.compile(
"([-+]?)(?:(0)|([1-9][0-9]*)|0[xX]([0-9A-Fa-f]+)|0([0-7]+)|([1-9][0-9]?)[rR]([0-9A-Za-z]+)|0[0-9]+)(N)?");
模式中的0([0-7]+)
部分证明了这一点。