私はClojure の喜びで破壊の例に取り組んでいますが、私を驚かせた例に出くわしました。これらはどちらも同じ出力を生成します。
(let [range-vec (vec (range 10)) [a b c & more :as all] range-vec]
(println "a b c: " a b c)
(println "more: " more)
(println "all: " all))
(let [range-vec (vec (range 10))]
(let [[a b c & more :as all] range-vec]
(println "a b c: " a b c)
(println "more: " more)
(println "all: " all)))
最初の形式は私の直感に反していました。なぜなら、束縛と優先順位が左から右に起こると考えると、「すべて」に割り当てる前に range-vec が定義されないからです。2 番目の形式である range-vec は既に定義されており、2 番目の let ステートメントで all に割り当てられています。これは、これまでに知っている規則に従っているようです。シンボルがバインドされた時期とその順序はいつわかりますか?