解構地圖
以下是如何構建地圖的方法:
(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]