有没有快速的方法来检查Clojure函数中的nil args?

时间:2014-03-06 10:27:14

标签: clojure null

在Phil Hagelberg(technomancygripes file中他陈述了关于Clojure的内容:

  

无处不在并导致很难找到源的错误

现在Phil是一个聪明的人,他为Clojure社区做出了很多贡献,每个人都使用他的东西 - 所以我觉得这值得深思。

管理函数的nil args的一种简单方法是抛出错误:

(defn myfunc [myarg1]
  (when (nil? myarg1) 
    (throw (Exception. "nil arg for myfunc")))
  (prn "done!"))

这两个额外的行每个参数reek的样板。是否有通过元数据或宏删除它们的惯用方法?

我的问题是是否有快速检查Clojure函数中的nil args的方法?

1 个答案:

答案 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/