Hey,

I when i tried to run my program with the shiny new 1.7, it broke. I have 
traced it down to the fact that zipmap (
https://github.com/clojure/clojure/blame/master/src/clj/clojure/core.clj#L2940) 
does returns the keys in a different order than i'm used to.

e.g clojure 1.6:

nREPL server started on port 52315 on host 127.0.0.1 - 
nrepl://127.0.0.1:52315
REPL-y 0.3.5, nREPL 0.2.7
Clojure 1.6.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_40-b26
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (zipmap [:a :b] [:c :d])
{:b :d, :a :c}

Whereas clojure 1.7 does:

nREPL server started on port 52193 on host 127.0.0.1 - 
nrepl://127.0.0.1:52193
REPL-y 0.3.5, nREPL 0.2.7
Clojure 1.7.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_40-b26
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

user=> (zipmap [:a :b] [:c :d])
{:a :c, :b :d}

As i'm using the keys function later on these values as a multimethod 
dispatch function, things break. 

It's rather trivial to change my program with the new ordering, but i was 
wondering if the ordering of the keys of the returned map is part of the 
contract.

When one would need more context about the actual code, the usage of the 
zipmap can be found here at 
https://github.com/jgeraerts/imageresizer/blob/master/src/net/umask/imageresizer/urlparser.clj#L19
.
The multimethod dispatch 
https://github.com/jgeraerts/imageresizer/blob/master/src/net/umask/imageresizer/resizer.clj#L15

The tests break with these kinds of exceptions:

ERROR in (test-resizer) (MultiFn.java:156)
expected: (= [200 [200 200]] (run-resizer "size/200x200/rose-cmyk.tiff"))
20:31:05.179 [main] WARN  net.umask.imageresizer.resizer - image not found 
for uri size/200x200/nonexisting
  actual: java.lang.IllegalArgumentException: No method in multimethod 
'scale' for dispatch value: (:width :height)
 at clojure.lang.MultiFn.getFn (MultiFn.java:156)
    clojure.lang.MultiFn.invoke (MultiFn.java:233)

I'm glad to hear your feedback. 

Kr,

Jo



-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to