提供断言的上下文额外信息是一个常见的需求。例如,可能希望将局部或动态绑定的值包含在断言报告中,或者在外部测试环境中使用 clojure.spec/assert
利用结构化错误。
使用 {{clojure.core/assert}} 可以将额外数据拼接到格式化消息中,但 {{clojure.spec/assert}} 没有这样的功能。clojure 的 {{assert}} 的 {{message}} 参数是在 CLJ-774 中添加的,并且在那里表示机制并不理想。将报告作为数据传递的一个显著好处是,编辑器可以在存在大量数据的情况下优雅地处理它们。
此建议与 CLJ-415 相关,但它具有更广泛的作用。通过传递额外的 map,可以传递任何值(而不仅限于局部变量),并且不会有意外涌入大型局部变量的风险。