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

欢迎!请参阅关于页面以获取更多关于该功能的信息。

+3 投票
Clojure

这似乎并没有节省太多时间,而且它将我排除在使用消息添加到断言之类的有用功能之外。

3 个回答

+4 投票

如果你更喜欢 assert 及其消息,那么似乎 never。

是的,前置/后置条件似乎从未得到扩展。就像它们缺少错误消息功能。
我认为您的答案是正确的实际应用方法。

大部分情况下,没有人使用这种元数据。看起来规范是完成应该由 :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 投票
...