请在 2024 Clojure 状况调查 中分享您的想法!

欢迎!请参阅 关于 页面了解更多关于如何使用本服务的信息。

+11
提问 文档

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

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

这相当误导,因为 {{assert}} 实际上抛出了一个 {{Error}}。人们可能会认为如果失败,将像任何其他 {{Exception}} 一样在日志中留下 stacktrace,但实际情况是 JVM 将终止。

这种行为是正确的,{{assert}} 应该在断言的条件为真时使程序退出,但我经常遇到使用不当的情况。

如果大家认为这是一个问题,我将准备一个补丁。

4 答案

+3

评论者:marc

文档字符串(既有现在的也有提出的)中还有一个遗漏——两者都没有提及 assert 的行为取决于动态变量 clojure.core/**assert** 的值。

+1

评论者:gordonsyme

clj-2225-20170913.patch 更新了 assert 宏的文档字符串,我将文档字符串分成了70个字符长,这似乎是文件其他部分的常见宽度。

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

评论者:alexmiller

Error 是 Throwable 的一个子类,就像 Exception 一样,没有特殊的行为(尽管它有特殊的含义,即大多数程序都不应该捕获它)。无论你的程序是否捕获它、退出还是记录,都完全取决于你的程序,而不是 Error 的属性。

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

...