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

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

+3
Clojure

这看起来不是什么快捷方式,而且它让我失去了添加错误消息等有用功能的特性。

3 个答案

+4

如果你更喜欢 assert 和它的消息,那么似乎永远不会。

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

在很大程度上,没有人使用这个元数据。这似乎表明规范是首选的方式来执行与:pre/:post一样的能力,而这些能力从未被充分利用。
+4
by

Michael Fogus(《Clojure 欢乐编程》的作者)

:pre和:post相比于assert的优点之一是,前者允许“断言”可能来自不同于函数体不同的来源。[...] :pre和:post也使得进行一些复杂的自动测试生成相对容易,并且作为一个额外的优势,为函数提供一种文档形式。Chris Houser提出了一个我之前不知道的有趣的观点,“如果你必须这样做,使用assert代替:pre通常很简单。使用:post代替assert很麻烦。”听起来很有道理。在此基础上,Chas Emerick评估说:pre和:post涵盖了99.5%的assert使用,同时提供了简单、一致的钩子。

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

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

:pre/:post作为元数据提供在:arglists的元数据中。所以你可以阅读这些并使用它来生成测试。这很有意义,我明白它能怎样发生(尤其是和spec一起)。

改变这些元数据不会改变断言!所以我看不出它们可以来自除函数体外的来源。
+1

还应考虑函数规范:[功能规范](https://clojure.org/guides/spec#_specing_functions)

...