On Tue, Sep 25, 2012 at 5:10 AM, Nahuel Greco <[email protected]> wrote:
> I can't find the documentation for this behaviour:
>
> (let [{x :b :as y} '(:a 1 :b 2)] [x y])
>
> ;=> [2 {:a 1, :b 2}]
>
> It seems as if the list in the init-expr is converted first to an
> associative structure and then destructured.
> But that behaviour doesn't seems to be documented, the map destructuring
> documentation only talks
> about destructuring of associative structures, and also there is nothing
> about binding the :as expression
> to the resultant associative structure instead of the initial init-expr.
>
> Is this documented somewhere? Is an intended behaviour assured to be present
> in the future Clojure
> versions?
TL;DR: Intentional. Since 1.2.0.
This behavior was added in Clojure 1.2.0, the changes.txt for that release says:
== 2.3 Destructuring Enhanced ==
If you associatively destructure a seq, it will be poured
into a map first:
(defn foo [& {:keys [a b c]}]
[a b c])
(foo :c 3 :b 2)
=> [nil 2 3]
But, I didn't see a reference to this behavior on the page on
clojure.org where special forms and destructuring are discussed [1].
[1]: http://clojure.org/special_forms#Special Forms--(let [bindings* ] exprs*)
// Ben
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en