Clojure中的自定义条件断言错误消息?

时间:2014-12-19 10:03:22

标签: clojure

假设我想要警告用户输入类型错误,例如

(defn my-sqrt [x] {:pre [(not (neg? x))]}        (Math/sqrt x))

是否可以发出消息“仅限正号码”,而不是像断言失败的那样?

2 个答案:

答案 0 :(得分:4)

您可以使用dire执行此操作。你应该看看它对preconditions的支持。

答案 1 :(得分:0)

如果您不想依赖外部库,clojure的(assert)支持可选消息。

缺点是,你将失去:pre的可读性,并且必须将结果保存在:post检查的中间变量中(或将其包装在一些宏魔法中) )。

简单示例:

(defn mysqrt [x]
  ;; preconditions
  (assert (pos? x) "Positive numbers only")
  (let [y (Math/sqrt x)]
    ;; postconditions
    (assert (number? y) "Some strange error happened")
    y))