Я пытаюсь понять какое-то поведение, которое я заметил в 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;
Здесь мы можем видеть, что все значения являются фактически различными переменными, что указывает на то, что происходит под обложками, но некоторые пояснения были бы очень полезными.