gpt4 book ai didi

clojure - :pre and :post? 的消息更易读

转载 作者:行者123 更新时间:2023-12-02 13:03:24 25 4
gpt4 key购买 nike

在 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)

这很好,但它没有解释为什么传递空集合没有意义的业务原因。 (或者包含五个以上元素的集合,或者存在两个键但没有另一个键的集合,或者无论当今的规则是什么。)如果前提条件使用私有(private)函数,这可能会让用户更加困惑。

在使用 :pre 和 :post 时,有没有办法向用户提供更有用的反馈,例如错误消息?

最佳答案

显然前置条件和后置条件是针对报告条款为开发人员提供足够信息的用例而设计的,即它是不言自明的。如果您想提供更多解释,通常使用 assert

但是您可以滥用这样一个事实,即始终报告整个情况,例如像这样:

{:pre [(do "It can't be empty because of..."
(seq x))]}

它会报告类似的内容

AssertionError Assert failed: (do "It can't be empty because of..." (seq x)) ...

关于clojure - :pre and :post? 的消息更易读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com