解构地图
以下是如何构建地图的方法:
(def my-map {:a 1 :b 2 :c 3})
然后,例如,在 let 块中,你可以非常简洁地从地图中提取值,如下所示:
(let [{x :a y :c} my-map]
(println ":a val:" x ", :c val: " y))
;; :a val: 1 , :c val: 3
请注意,每个映射中提取的值都在左侧,与它们关联的键在右侧。
如果要将值解析为具有与键相同名称的绑定,可以使用此快捷方式:
(let [{:keys [a c]} my-map]
(println ":a val:" a ", :c val: " c))
;; :a val: 1 , :c val: 3
如果你的键是字符串,你可以使用几乎相同的结构:
(let [{:strs [foo bar]} {"foo" 1 "bar" 2}]
(println "FOO:" foo "BAR: " bar ))
;; FOO: 1 BAR: 2
对于符号类似:
(let [{:syms [foo bar]} {'foo 1 'bar 2}]
(println "FOO:" foo "BAR:" bar))
;; FOO: 1 BAR: 2
如果要构建嵌套映射,可以嵌套上面解释的绑定表单:
(def data
{:foo {:a 1
:b 2}
:bar {:a 10
:b 20}})
(let [{{:keys [a b]} :foo
{a2 :a b2 :b} :bar} data]
[a b a2 b2])
;; => [1 2 10 20]