在core.spec被引入后,:pre和:post defn条件已经过时了吗?

3

我刚接触Clojure,第一眼看起来core.spec可以做所有的 :pre & :post defn 条件所能做的事情,而且还有更多功能。

我知道core.spec是后来引入的(仍处于测试阶段),而 :pre & :post defn 条件存在了很长时间 - 也许这就是为什么pre/post仍然不被视为过时方法的原因吗?

是否有些功能是 :pre/:post 提供的,而 core.spec 无法实现呢?

谢谢


“core.spec 是否提供了 :pre 和 :post defn 条件的严格超集?”这样的措辞可能会减少主观性,更加具体。这种措辞意味着,任何选择不使用超出核心语言持续兼容性保证的库的人都需要为自己的选择提供证明。 - Charles Duffy
2个回答

2
许多人更喜欢Plumatic Schema而不是Clojure Spec(两者都有其优点)。clojure.test.check也非常强大。
这里的主要观点是,所有上述内容通常仅适用于运行单元测试时。当函数执行时,:pre:post检查始终适用。
我喜欢的另一个工具是Plumatic Schema函数validate。您可以在tupelo.core/validate中找到一个类似(但更好)的函数

以上所有内容仅适用于运行单元测试时(通常如此)。但是,如果您调用clojure.spec/instrument,那么这些检查也将在生产环境中启用,对吗?或者在Clojure中被认为是反模式吗?只是好奇。 - BinaryButterfly
1
您可以在生产环境中使用工具,但这会引入一些检查开销,可能不是您想要的。此外,仪器测试可能会导致在运行时执行生成测试,如果您已经对高阶函数上的fspec参数进行了仪器化,则需要小心处理。一般建议只在开发/测试中使用工具。 - Sean Corfield

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接