Quick example:
(defmulti foo #(* % 100))
(defmethod foo 0 [_] "passed in zero")
(defmethod foo 100 [_] "passed in one")
(defmethod foo 200 [_] "passed in two")
(defmethod foo :default [n] (str "passed in " n))
...
>>> (foo 2)
"passed in two"
>>> (foo 5)
"passed in 5"
(written off the top of my head, so excuse any mistakes..)I'm only using a single argument here and I'm dispatching on a function of its value. I could just as easily dispatch on multiple arguments (or an arbitrary amount).