假设我想要警告用户输入类型错误,例如
(defn my-sqrt [x] {:pre [(not (neg? x))]} (Math/sqrt x))
是否可以发出消息“仅限正号码”,而不是像断言失败的那样?
答案 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))