2024年Clojure状态调查!分享您的想法。

欢迎!请参阅关于页面了解更多关于这个网页如何工作的信息。

+11投票
文档

{{assert}}宏有两种形式,分别为{{(assert x)}}和{{(assert x message)}}。

该文档字符串为:
{quote}
评估expr,如果其不为逻辑真,则抛出异常。
{quote}

这相当误导,因为实际上{{assert}}会抛出{{Error}}异常。人们可能会假设像其他{{Exception}}一样,失败将会在日志中导致堆栈跟踪,但事实是JVM将终止。

行为是正确的,{{assert}}应该在断言条件为真时导致程序退出,但我不止一次遇到使用不当的情况。

如果人们同意这是一个问题,我将设法修复它。

4个回答

+3投票

评论者:marc

文档字符串(当前和拟议的)中还有一处遗漏——都没有提到assert的行为取决于clojure.core/**assert**动态变量值。

+1投票

评论者:gordonsyme

clj-2225-20170913.patch更新了assert宏的文档字符串。我已经将文档字符串包裹在70个字符宽的格式中,这似乎是文件其他部分使用的相对常用的宽度。

+1投票
参考:https://clojure.atlassian.net/browse/CLJ-2225(由 gordonsyme 报告)
0

评论者:alexmiller

错误是 Throwable 的子类,就像异常一样,它没有特别的行为(尽管它具有特别的意义,即大多数程序不应该捕获它)。无论您的程序是否捕获它,或者退出,或者记录,完全取决于您的程序,而不是 Error 的属性。

我认为这里可能需要做的唯一改变就是更具体地说明异常类型。

...