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