У меня есть мультиметод, который специализируется на двух параметрах:
(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)
Однако это не будет работать, если tag
на самом деле :default
.
Какой хороший способ сделать это?