Destructuringλ︎
Destructuring is a form of pattern matching that is common in Clojure. Destructuring allow you to pull out the specific elements from a collection.
Destructuring is commonly used with the let
method for creating local bindings (locally scoped names).
(let [[a b c & d :as e] [1 2 3 4 5 6 7]]
[a b c d e])
(let [[[x1 y1][x2 y2]] [[1 2] [3 4]]]
[x1 y1 x2 y2])
;; with strings
(let [[a b & c :as str] "asdjhhfdas"]
[a b c str])
;; with maps
(let [{a :a, b :b, c :c, :as m :or {a 2 b 3}} {:a 5 :c 6}]
[a b c m])
It is often the case that you will want to bind same-named symbols to the map keys. The :keys directive allows you to avoid the redundancy:
This can be written in a shorter form as follows:
As of Clojure 1.6, you can also use prefixed map keys in the map destructuring form:
As shown above, in the case of using prefixed keys, the bound symbol name will be the same as the right-hand side of the prefixed key. You can also use auto-resolved keyword forms in the :keys directive: