Компьютеры обычно интерпретируют число как 08
или 09
как восьмеричное, что является ошибкой, поскольку восьмеричные цифры идут только от 0..7.Исторически считалось, что использование начального нулевого символа 0
было разумным типом кода, поскольку символ 0
выглядит как символ O
из слова Octal
.Таким образом, когда компилятор видит целое число, начинающееся с 0
, оно интерпретируется как «Следующие цифры должны интерпретироваться в base-8, а не в base-10».Пример:
12 => twelve (parsed using base-ten)
012 => ten (parsed using base-eight)
Эта попытка быть чрезмерно умной до сегодняшнего дня, как вы обнаружили, вызывает проблемы.
Итак, это вовсе не ваша функция, а просто плохое сообщение об ошибке.Обратите внимание:
(println "val=" 8) => `val= 8`
, но
(println "val=" 08)
=> Error refreshing environment: Syntax error reading source at (tst/demo/core.clj:19:20).
Я не получаю сообщение об ошибке, касающееся «Несоответствующего разделителя», поэтому я не уверен, как это возникло.