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

欢迎!请查看关于页面以获得更多关于如何使用本站的信息。

+3
Clojure

这看起来并不是一个多么便捷的快捷方式,同时也使我无法使用向断言添加消息等有用的功能。

3 答案

+4

如果你更喜欢assert及其消息,那么这似乎永远都不会发生。

是的,前置/后置条件感觉还没有得到扩展。好像缺少了错误消息的功能。
我认为你的回答是正确的实用用法。

总的来说,几乎没有人在使用这些元数据。看起来规范是完成与:pre/:post相关的功能的首选方式,而这些功能从未得到充分利用。
+4

迈克尔·福格斯(《Clojure的乐趣》一书的作者)

:pre和:post相比assert的优点之一是,它们允许“断言”可能来自不同于函数体的来源。[...] :pre和:post还使进行一些复杂的自动测试生成变得相对容易,并且作为额外的好处,为函数提供了一种形式的文档。克里斯·豪斯还提出了一个我之前不知道的有趣观点:“如果你不得不这样做,用assert代替:pre通常很简单。用assert代替:post很痛苦。”听起来很合理。在此基础上,查斯·艾默里克的评估认为:pre和:post涵盖了99.5%的assert用法,并且提供了简单、一致的钩子。

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

我花费了一段时间试图弄清楚如何完成提到的一些事情。

:pre/:post可以作为(metadata)的元数据在:arglists中提供。因此,您可以读取这些内容并使用它们来生成测试。这很有道理,我明白这是如何发生的(特别是与spec一起)。

更改该元数据不会更改断言!因此,我不认为可以从非主体的来源获得它们。
+1 投票
...