对地图进行解构看起来与我相反。谁能解释一下发生了什么?
我希望这是解构地图的正确形式
=> (让[{:a a:b b} {:a 1:b 2}] [a b])
返回Exception Unsupported binding form: :a clojure.core/destructure/pb--4541 (core.clj:4029)
。 Clojure文件说下面是正确的方法。但看起来键和值是相反的。
这应该是正确的方法:
=> (让[{a:a b:b} {:a 1:b 2}] [a b]) [1 2]
解构地图时会发生什么?
答案 0 :(得分:6)
它并没有真正逆转,实际上它是有道理的。它表示:将符号'a'绑定到与关键字相关联的值:a
当地图使用关键字作为键时,您是否知道这一点?
(let [{:keys [a b]} {:a 1 :b 2}] [a b])
更整洁,更优雅!
如果您的密钥是符号或字符串,则存在其他变体。
答案 1 :(得分:0)
此外,它可以区分这些情况:
cljs.user=> (let [{foo :foo :as bar} {:foo 3 :as 4}] [foo bar])
[3 {:foo 3, :as 4}]
cljs.user=> (let [{foo :foo bar :as} {:foo 3 :as 4}] [foo bar])
[3 4]