为什么Clojure的地图解构看起来相反?

时间:2013-12-19 14:05:13

标签: clojure

对地图进行解构看起来与我相反。谁能解释一下发生了什么?

我希望这是解构地图的正确形式

  

=> (让[{: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]

解构地图时会发生什么?

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]