首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于Clojure中的多方法,输入验证是一个合理的用法吗?

对于Clojure中的多方法,输入验证是一个合理的用法吗?
EN

Stack Overflow用户
提问于 2016-02-20 05:00:49
回答 1查看 82关注 0票数 2

clojure.org documentation on multimethods中,它声明:

Clojure multimethods ... can do validation of arguments and route to error-handling methods etc.

然而,我并没有看到很多使用多方法来达到这个目的的例子。在我只需要实现一个方法定义的情况下,使用多方法进行输入验证仍然有意义吗?例如:

代码语言:javascript
复制
(defmulti divide
          (fn [a b] (if (zero? b)
                      (throw (IllegalArgumentException. "Cannot divide by zero"))
                      :ok)))
(defmethod divide :ok [a b] (quot a b))

这样做的好处是,它保持了divide的最终实现对输入检查或错误处理的清晰度。有没有更常用的方法来获得验证、错误处理和干净的语法?

EN

回答 1

Stack Overflow用户

发布于 2016-02-20 05:04:48

这不是“路由到错误处理方法”的意思。建议的技术更像是这样:

代码语言:javascript
复制
(defmulti divide (fn [num denom] denom))
(defmethod divide 0 [num denon]
  (throw (IllegalArgumentException. "Cannot divide by zero")))
(defmethod divide :default [a b] (quot a b))

错误不是来自分派函数本身:相反,分派函数发现错误的输入值,并将它们发送到专用的错误处理程序,以便其他方法知道它们将始终获得有效输入。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35514942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档