Clojure collections can be taken apart with new bindings. The bindings hold a value within the collection and can be bound in multiple ways for multiple collection types. The following is the example collection that will be used for the rest of the destructuring examples:
user> (def abc {:a 1 :b 2 :c 3}) #'user/abc user> (keys abc)(vals abc) (:a :c :b) (1 3 2) user> (:a abc)(:c abc) 1 3
Using the let
form, one way of binding a key value collection is to provide: a hash-map that describes the new binding and where the value should come from.
user> (let [{value-a :a value-b :b value-c :c} abc] (str value-c value-b value-a)) "321"
Non-key value collections can be bound by their position in the collection:
user> (sort (vals abc)) (1 2 3) user> (let [[a b c] (sort (vals abc)) ab [a b] bc [b c] ca [c a]] (println ab bc ca)) [1 2] [2 3] [3 1] Nil
If the value is a collection, another...