(defmethod multifn dispatch-val & fn-tail)
Creates and installs a new method of multimethod associated with dispatch-value.
(defmulti service-charge (fn [acct] [(account-level acct) (:tag acct)]))
(defmethod service-charge [::acc/Basic ::acc/Checking] [_] 25)
(defmethod service-charge [::acc/Basic ::acc/Savings] [_] 10)
(defmethod service-charge [::acc/Premium ::acc/Account] [_] 0)
;this example illustrates that the dispatch type
;does not have to be a symbol, but can be anything (in this case, it's a string)
(defmulti greeting
(fn [x] (x "language")))
;params is not used, so we could have used [_]
(defmethod greeting "English" [params]
"Hello!")
(defmethod greeting "French" [params]
"Bonjour!")
;then can use this like this:
(def english-map {"id" "1", "language" "English"})
(def french-map {"id" "2", "language" "French"})
=>(greeting english-map)
"Hello!"
=>(greeting french-map)
"Bonjour!"
;; Methods can be given a name. Very useful in stack traces.
(defmethod foo "a" name-of-method [params] "was a")