On Mon, 1 Nov 2010 19:25:59 -0700 (PDT)
Mike K <[email protected]> wrote:
> This question is a bit abstruse, so please bear with me :-)
[elided]
> So this can't be how it works, but I don't know how else to interpret
> the documentation. Is this a special case meaning "if there are
> optional arguments AND they are to be destructured via a map, then
> insert them pairwise into a map instead of a vector"? Or does this
> behavior fall directly out of the destructuring rules without a
> special case based on something I'm missing?
My gut reaction is that you found a bug. This behavior was added in
1.2, as noted in the change log:
== 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]
I don't see anything about "optional arguments" there, just that using
a map to destructure a sequence should cause it to be converted to a
map. Which to me means your second (failing) example ought to work, so
that:
user=> (let [{a :a} [:a 2 :b 3]] [a])
[nil]
should return [2], not [nil]. Unfortunately, the doc at
http://clojure.org/special_forms on bindings doesn't cover this
case. Given that the doc I did found was a change log, I wouldn't put
to much credence on it - those generally aren't definitive. But I'd
like to see a definitive answer as well.
<mike
--
Mike Meyer <[email protected]> http://www.mired.org/consulting.html
Independent Network/Unix/Perforce consultant, email for more information.
O< ascii ribbon campaign - stop html mail - www.asciiribbon.org
--
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