В clojure.org documentation on multimethods она гласит:Является ли входная проверка разумной способностью использования нескольких методов в Clojure?
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
чистой проверки ввода или обработки ошибок. Есть ли более идиоматический способ получения валидации, обработки ошибок и чистого синтаксиса?
Спасибо, будет ли это все еще действительным использованием мультиимходов? Или было бы просто, если бы в начале функции было более идиоматично? –