蹊跷Clojure的NullPointerException异常时,高清矢量
(def b [08])
显示java.lang.NullPointerException:空
但
(def b [8])
是OK
为什么呢?
蹊跷Clojure的NullPointerException异常时,高清矢量
(def b [08])
显示java.lang.NullPointerException:空
但
(def b [8])
是OK
为什么呢?
我对clojure一无所知,但在许多语言中,以零开头的整数文字被解释为octal(base 8)。 8是无效的八进制数字。
从快速实验在Try Clojure:
> (def b [08])
java.lang.NumberFormatException: Invalid number: 08
> (def b [07])
#'sandbox155/b
看来,这确实是你的问题。
不要开始具有前导零的整数(例如08
),除非您实际上打算使用八进制表示法。
@Jonathon莱因哈特是正确的,根据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]+)
证明这一点。