Мультиметоды позволяют указать собственную функцию отправки.Таким образом, вы можете отправлять на основе любого предиката!Следующий код отправляется на основе интерфейса, реализованного аргументом:
(defmulti process-collection
(fn [arg1 & _]
(cond
(instance? java.util.List arg1) :list
(instance? java.util.Set arg1) :set
:else :coll)))
(defmethod process-collection :list
[list-to-process]
())
(defmethod process-collection :set
[set-to-process]
())
(defmethod process-collection :coll
[coll-to-process]
())