请在 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 投票
...