When clojure evaluates a piece of code it goes through several steps.
First the reader takes the string representation of your code and
turns it into the clojure data structures represented by your code.
Those data structures are then sent to the compiler for compilation,
including possible macro expansion.

Your code contains {~@(mapcat (fn [x] (list (keyword x) x)) args)} in
it.  The {} characters instruct the reader that this is a literal
map.  The reader expects a literal map to have an even number of
elements, which your code does not have.  It has one element.
Therefore the reader throws an out of bounds exception.  The exception
is being thrown by the reader (the bit that takes a string and turns
it into clojure datastructures) BEFORE it ever gets to the point where
it is trying to do a macro expansion.

Note that {:a} by itself also throws an ArrayIndexOutOfBounds
exception.

K.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to