Skip to content

Instantly share code, notes, and snippets.

@AdamFrey
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AdamFrey/206bb51d45a17819aded to your computer and use it in GitHub Desktop.
Save AdamFrey/206bb51d45a17819aded to your computer and use it in GitHub Desktop.
Multi-method non-redefine
user=> (defmulti even-or-odd (fn [n] (if (even? n) :odd :even)))
#'user/even-or-odd
user=> (defmethod even-or-odd :even [n] "even")
#object[clojure.lang.MultiFn 0x7fd6a23b "clojure.lang.MultiFn@7fd6a23b"]
user=> (defmethod even-or-odd :odd [n] "odd")
#object[clojure.lang.MultiFn 0x7fd6a23b "clojure.lang.MultiFn@7fd6a23b"]
user=> (even-or-odd 1)
"even"
user=> ;; oops, let's try again
user=> (defmulti even-or-odd (fn [n] (if (even? n) :even :odd)))
nil
user=> (even-or-odd 1)
"even"
user=> ;; hmm. that didn't work
user=> (def even-or-odd nil)
#'user/even-or-odd
user=> (defmulti even-or-odd (fn [n] (if (even? n) :even :odd)))
#'user/even-or-odd
user=> (defmethod even-or-odd :even [n] "even")
#<MultiFn clojure.lang.MultiFn@1e9b11c>
user=> (defmethod even-or-odd :odd [n] "odd")
#<MultiFn clojure.lang.MultiFn@1e9b11c>
user=> (even-or-odd 1)
"odd"
user=> ;; finally
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment