There is a long discussion about how maps and sets should behave (throw on dups or not) (see ''question about sets on the mailing list)....for the moment try using the constructor fn hash-map rather than the map literal...so basically do this:

(hash-map (generate-id) "foo"
               (generate-id) "bar")

hope that helps

Jim


On 12/09/12 18:38, jarppe wrote:
I have a function that returns unique ID every time it is called. If I try to create a new map with two entries, both having a unique key generated by that function, I get IllegalArgumentException Duplicate key exception. For example:

    user=> *(def id (atom 0))*
    user=> *(defn generate-id [] (swap! id inc))*
    user=>
    user=> *{(generate-id) "foo" (generate-id) "bar"}*
    IllegalArgumentException Duplicate key: (generate-id)
     clojure.lang.PersistentArrayMap.createWithCheck
    (PersistentArrayMap.java:70)


How ever, it works just fine if I do it like this:

    user=> *(let [id1 (generate-id) id2 (generate-id)]  {id1 "foo" id2
    "bar"})*
    {3 "foo", 4 "bar"}


Is this a bug, or am I doing something wrong here?

I'm using Clojure 1.4.

--
-jarppe

--
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

--
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