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

欢迎!有关如何工作的更多信息,请参阅关于页面。

+11
文档

{{assert}}宏有两种参数,文档中记录为{{(assert x)}}和{{(assert x message)}}。

该文档字符串是
{quote}
评估expr,如果它不是逻辑真值,就抛出异常。
{quote}

这相当具有误导性,因为{{assert}}实际上抛出的是{{Error}}。人们可能会假设,如任何其他异常一样,失败会导致日志中的堆栈跟踪,但实际上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 的一个子类,就像 Exception 一样,没有特殊的行为(尽管它有这样一个特殊的意图,即大多数程序不应该捕获它)。你的程序是否捕获它、退出或记录,完全取决于你的程序,而不是 Error 的属性。

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

...