Clojure spec是什么?

6

我无法理解 clojure.spec 的意图。

它解决了哪些问题?

为什么我们应该使用它?

2个回答

30

spec 允许你创建数据和函数的规范。规范在本质上是基于已有 Clojure 谓词的预测性和结构化的,而不像你在静态类型语言中看到的基于类型。通过基于谓词来定义规范,你可以编写比大多数类型系统更具表现力的规范,并使用与你的代码相同的语言。

在函数上定义的规范指定了参数、返回值和参数及返回值的函数的规范。最后一个允许检查比大多数类型或合同系统还要广泛的事情(容易地)。

一旦你定义了规范,你可以使用它们来:

  • 检查值是否符合规范
  • "符合"值,这给出了一个分析和解构版本的值
  • 详细说明值为什么不符合规范(作为字符串、到 stdout 或作为数据)
  • 用描述性规范增强函数文档
  • 从规范生成示例数据
  • 在开发中断言一致性,但在生产中关闭
  • 检测开发中的无效调用或测试针对受检测函数进行工具的调用
  • 为一个受规范约束的函数生成和运行基于属性的测试
  • 开发结合仪器和测试生成与存根和模拟工具的测试

你可以使用规范来提高开发效率(通过澄清和记录你的意图、捕获无效调用和断言数据有效性)、测试效率(捕获无效调用、验证有效性、生成示例数据和为规范化函数生成自动测试)和生产效率(通过使用符合性进行解构)。

此外,Clojure 核心库对规范的使用将导致更好的错误消息和对核心库使用的扩展开发时间检查以更早地发现错误。


2
我非常喜欢Stuart Halloway关于Clojure spec的视频:https://www.youtube.com/watch?v=nqY4nUMfus8 - Tim Stewart

9

对于spec库的问题有些笼统,特别是“为什么要使用它”的部分。你读过以下内容吗?


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