Clojure:如何在全局范围内启用规范断言?

标签 clojure clojure.spec

我想使用 clojure 规范来检查我的函数的输入(至少在开发期间)。到目前为止,我已经完成了以下工作:我已经定义了规范,并且在函数的开头我已经像这个例子中那样放置了断言:

(defn foo [bar]
  (s/assert ::bar bar)
  (do-something-with bar))

其中 sclojure.spec.alpha 的别名。默认情况下,这些断言似乎被禁用(当使用 midje 运行单元测试时)。我可以通过将 (s/check-asserts true) 放入我的文件之一来启用它们。不过,我不确定此设置的范围是什么。我觉得将它简单地放入其中一个源文件中是不对的,尽管到目前为止它似乎对我有用。

在测试期间全局启用这些断言但在部署应用程序时禁用它们的推荐方法是什么?

最佳答案

还有系统属性 clojure.spec.check-asserts,您可以将其设置为 true。这用于设置断言检查的初始值。 参见 https://clojure.org/guides/spec#_using_spec_for_validation

关于Clojure:如何在全局范围内启用规范断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58524436/

相关文章:

clojure - 代理和具体化有什么区别?

clojure - 在 Clojure 和其他 Lisp 方言中,在函数名称末尾使用星号的约定是什么?

clojure - 使用规范/合并规范/多规范

clojure - 如何 Clojure.Spec 引用类型(如原子)?

recursion - Clojure 递归是否向后工作?

clojure - 什么是fn *?Clojure Bootstrap 如何?

clojure - 处理 map 中打包的数据结构的惯用方法?

clojure - clojure.spec 打算在多大程度上取代传统的功能自动化测试?

Clojure Spec vs Typed vs Schema

fdef 的 clojure.spec 验证