defmethod catch all

У меня есть мультиметод, который специализируется на двух параметрах:

(defmulti get-tag-type (fn [type tag] [type tag]))

Наличие этот тип позволяет мне сгруппировать вызовы различных методов defmethod в наборы:

(defmethod get-tag-type [::cat 0] [type tag] ::tiger)
(defmethod get-tag-type [::cat 1] [type tag] ::lion)
(defmethod get-tag-type [::cat 2] [type tag] ::jaguar)

(defmethod get-tag-type [::dog 0] [type tag] ::poodle)
(defmethod get-tag-type [::dog 1] [type tag] ::australian-shepherd)
(defmethod get-tag-type [::dog 2] [type tag] ::labrador-retriever)

Однако иногда мне нужно перехватить все или значение по умолчанию для одной из групп, которая будет вызываться, если ни одна из других не соответствует:

(defmethod get-tag-type [::dog :default] ::mutt)

Однако это не будет работать, если тег на самом деле не : default .

Как лучше всего это сделать?

8
задан Brigham 25 February 2012 в 01:20
поделиться