在Phil Hagelberg(technomancy)gripes file中他陈述了关于Clojure的内容:
无处不在并导致很难找到源的错误
现在Phil是一个聪明的人,他为Clojure社区做出了很多贡献,每个人都使用他的东西 - 所以我觉得这值得深思。
管理函数的nil args的一种简单方法是抛出错误:
(defn myfunc [myarg1]
(when (nil? myarg1)
(throw (Exception. "nil arg for myfunc")))
(prn "done!"))
这两个额外的行每个参数reek的样板。是否有通过元数据或宏删除它们的惯用方法?
我的问题是是否有快速检查Clojure函数中的nil args的方法?
答案 0 :(得分:7)
对于这些情况,有一种基于clojure语言的解决方案: http://clojure.org/special_forms#toc10
(defn constrained-sqr [x]
{:pre [(pos? x)]
:post [(> % 16), (< % 225)]}
(* x x))
根据您的要求改编:
(defn constrained-fn [ x]
{:pre [(not (nil? x))]}
x)
(constrained-fn nil)
=> AssertionError Assert failed: (not (nil? x)) ...../constrained-fn (form-init5503436370123861447.clj:1)
还有@fogus contrib库core.contracts,一个更复杂的工具
此页面上的更多信息http://blog.fogus.me/2009/12/21/clojures-pre-and-post/