我试图了解我在 Clojure 中注意到的一些行为。
可以使用重复多次的相同绑定名称创建一个 let 绑定:
(let [a 1 a 2 a b] a)
; (= a 2)
(let [a 1 a 2 a 3] a)
; (= a 3)
我知道 let 绑定被评估,这一切都是有意义的。
我对文档的理解是“用 let 创建的本地变量不是变量。一旦创建,它们的值就永远不会改变!”
上面的语法是否真的改变了绑定的值?
这感觉应该引发错误。
作为一种旁注:
有趣的是,您可以使用 clojurescript 将上述内容输出为 JS:
var a__36584 = 1, b__36585 = 2, a__36586 = b__36585;
var a__30671 = 1, a__30672 = 2, a__30673 = 3;
在这里,我们可以看到这些值实际上都是不同的变量,这表明了幕后发生的事情,但一些澄清会非常有帮助。