Я пытаюсь понять некоторое поведение, которое я заметил в Clojure.
Можно создать привязку let с одним и тем же именем привязки-, повторяющимся несколько раз.:
(let [a 1 a 2 a b] a)
; (= a 2)
(let [a 1 a 2 a 3] a)
; (= a 3)
Я понимаю, что привязки let оцениваются, и все это в основном имеет смысл.
Насколько я понял из документации, "Локальные переменные, созданные с помощью let, не являются переменными. После создания их значения никогда не меняются!"
Действительно ли приведенный выше синтаксис изменяет значение привязок?
Кажется, что это должно вызвать ошибку.
В качестве примечания:
Интересно, что вы можете вывести приведенное выше как JS с clojurescript:
var a__36584 = 1, b__36585 = 2, a__36586 = b__36585;
var a__30671 = 1, a__30672 = 2, a__30673 = 3;
Здесь мы видим, что все значения на самом деле являются отдельными переменными, что указывает на то, что происходит под обложками, но некоторые уточнение было бы очень кстати.