I just noticed this in the 1.2 beta release notes: * defmulti - Enhanced to have defonce semantics
I've been bitten by this for a couple months now and I never knew the reason. If (during interactive development) you want to change the dispatch function for a multimethod, what is now the proper way? I used to be able to just rerun the defmulti or recompile/reload the file containing the defmulti. I'd lose all the methods defined for that multimethod (which sometimes forced me to hunt down all the files that defined methods on it and recompile them all too), but I could live with that. Clojure 1.1.0 user=> (defmulti foo (fn [x] x)) #'user/foo user=> (defmulti foo (fn [x y] x)) #'user/foo user=> (defmethod foo :foo [x y] y) #<MultiFn clojure.lang.mult...@5eb7ec5d> user=> (foo :foo :bar) :bar But now: Clojure 1.2.0-beta1 user=> (defmulti foo (fn [x] x)) #'user/foo user=> (defmulti foo (fn [x y] x)) ;;does nothing nil user=> (defmethod foo :foo [x y] y) #<MultiFn clojure.lang.mult...@4b14b82b> user=> (foo :foo :bar) java.lang.IllegalArgumentException: Wrong number of args (2) passed to: user$eval1$fn (NO_SOURCE_FILE:0) I've been putting (def foo nil) (defmulti foo ...) in a bunch of my source files to force recompilation whenever the files are recompiled. Thanks --Brian -- 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