Что-то не так сClojure NullPointerException когда Защиту вектора
(def b [08])
java.lang.NullPointerException: нулевой
но
(def b [8])
ОК
почему?
Что-то не так сClojure NullPointerException когда Защиту вектора
(def b [08])
java.lang.NullPointerException: нулевой
но
(def b [8])
ОК
почему?
Я ничего не знаю о clojure, но на многих языках целочисленный литерал, начинающийся с нуля, интерпретируется как octal (база 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]+)
в шаблоне доказывают это.