Tengo un multimétodo que se especializa en dos parámetros:captura defmethod todo
(defmulti get-tag-type (fn [type tag] [type tag]))
Tener el tipo me permite agrupar los diferentes defmethod pone en conjuntos:
(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)
Sin embargo, a veces, quiero un catch all o por defecto para uno de los grupos, que se llamaría si ninguno de los otros coincide:
(defmethod get-tag-type [::dog :default] ::mutt)
Sin embargo, esto no funciona a menos que tag
sea realmente :default
.
¿Cuál es una buena manera de lograr esto?
No quiero que los defmulti sepan sobre los defmethods que lo usarán. – Brigham