在 clojure 我正在使用 :pre 像这样
user=> (defn cannot-take-empty [x] {:pre [((complement empty?) x)]} 1)
#'user/cannot-take-empty
user=> (cannot-take-empty #{})
AssertionError Assert failed: ((complement empty?) x) user/cannot-take-empty (NO_SOURCE_FILE:186)
这很好,但它没有解释为什么传入空集合没有意义的商业原因。(或者一个包含五个以上元素的集合,或者一个存在两个键但没有另一个键的集合,或者任何一天的规则。)如果前置条件使用私有函数,这可能会让用户更加困惑。
在使用 :pre 和 :post 时,有没有办法向用户提供更有用的反馈,例如错误消息?