MK
но у мультиметодов нет super
Size: a a a
MK
MK
((get-method… ) …)
MK
IG
MK
(derive :e/article :e/publication)
(defmethod validate :e/article [x]
((get-method validate :e/publication) x)
…)
MK
MK
MK
MK
IG
IG
MK
MK
MK
(defprotocol Validatable
:extend-via-metadata true
(validate [val]))
(def blank-publication
(with-meta {} {`validate (fn [x] x)}))
(def blank-article
(vary-meta blank-publication update `validate
(fn [old]
(fn [x]
(old x)))))
MK
MK
MK
AC
MK
ИФ
(def article-validations [validate-word-count])
(def photo-validations (conj article-validations validate-total-weight validate-copyright))
(defn validate [article]
(reduce (fn [[article validation-data] validator] (merge validation-data (validator article)))
[article {}]
photo-validations))