В документации clojure.org по мультиметодам говорится:
Clojure multimethods ... can do validation of arguments and route to error-handling methods etc.
Однако я не вижу много примеров использования мультиметодов для этой цели. В ситуации, когда мне нужно реализовать только одно определение метода, имеет ли смысл использовать мультиметоды для проверки ввода? Например:
(defmulti divide
(fn [a b] (if (zero? b)
(throw (IllegalArgumentException. "Cannot divide by zero"))
:ok)))
(defmethod divide :ok [a b] (quot a b))
Преимущество этого в том, что окончательная реализация divide
остается чистой от проверки ввода или обработки ошибок. Есть ли более идиоматический способ получить проверку, обработку ошибок и чистый синтаксис?