Clojure let допускает несколько привязок с одним и тем же именем.

Я пытаюсь понять некоторое поведение, которое я заметил в 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;

Здесь мы видим, что все значения на самом деле являются отдельными переменными, что указывает на то, что происходит под обложками, но некоторые уточнение было бы очень кстати.

12
задан Toby Hede 28 March 2012 в 07:24
поделиться