当def向量时,clojure NullPointerException

时间:2014-01-23 05:53:56

标签: clojure

出了点问题
(def b [08])

java.lang.NullPointerException:null

(def b [8])

没问题

为什么?

2 个答案:

答案 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]+)部分证明了这一点。