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

欢迎!请参阅关于页面以了解更多关于此工作的信息。

+3
Clojure

这似乎不是一个很大的快捷方式,并且它切断了我添加消息到断言的有用功能。

3 个答案

+4

如果你更喜欢assert及其消息,那么这似乎从未发生过。

是的,前提/后置条件感觉好像从来没有得到扩展。好像它们缺少错误消息的功能。
我认为你的答案是正确的实际应用方法。

大部分情况下,没有人使用这个元数据。似乎规范是执行与 :pre/:post 相关功能的首选方法,而这些功能从未被充分利用。
+4

Michael Fogus(《Clojure的乐趣》作者)

:pre 和 :post 优于 assert 的一个优势是,前者允许“断言”可能来自不同于函数主体的不同源。[...]:pre 和 :post 还使进行一些复杂的自动测试生成变得相对容易,并且作为额外的福利,为函数提供文档形式。Chris Houser 添加了一个我之前不知道的有趣的观点,“在使用 assert 代替 :pre 时通常相当直接,如果必须这么做。在使用 assert 代替 :post 时则很痛苦。”听起来合情合理。在此基础上,Chas Emerick 对:pre 和 :post 的评估,认为它们涵盖了 99.5% 的 assert 应用,并提供简单统一的钩子。

来源:fogus: Clojure的 :pre 和 :post,评论编号 14。

我曾经花了一些时间试图弄清楚如何做提到的一些事情。

:pre/:post 作为元数据可供 var 的 :arglists 元数据的元数据使用。因此,您可以读取这些并使用它来生成测试。这合乎逻辑,我看到它是如何发生的(特别是与 spec 一起)。

更改该元数据不会更改断言!因此,我不明白它们如何来自除主体之外的来源。
+1 投票
...