请在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 可以涵盖 assert 的 99.5% 使用,并提供简单、一致的功能钩子。

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

我花了一段时间来尝试弄清楚如何进行提到的一些事情。

:pre/:post 作为元数据存在,位于 var 的元数据的 :arglists 上。因此,您可以读取这些并使用它来生成测试。这是有意义的,并且我能看到它是如何发生的(特别是与 spec 相关)。

更改这些元数据不会更改断言!所以我看不出它们可以来自一个不是体的来源。
+1
by
...