Clojureで気付いたいくつかの動作を理解しようとしています。
同じバインディング名を複数回繰り返して、letバインディングを作成することができます。
(let [a 1 a 2 a b] a)
; (= a 2)
(let [a 1 a 2 a 3] a)
; (= a 3)
バインディングが評価されることを理解していますが、これはほとんど意味があります。
ドキュメントからの私の理解は、「letで作成されたローカルは変数ではありません。一度作成されると、それらの値は決して変更されません!」ということです。
上記の構文は実際にバインディングの値を変更しますか?
これはエラーが発生するように感じます。
一種の補足として:
興味深いことに、上記をclojurescriptを使用してJSとして出力できます。
var a__36584 = 1, b__36585 = 2, a__36586 = b__36585;
var a__30671 = 1, a__30672 = 2, a__30673 = 3;
ここでは、値がすべて実際には別個の変数であることがわかります。これは、内部で何が起こっているかを示していますが、いくつかの説明が非常に役立ちます。