7

我无法理解clojure的意图。规格

它解决了什么样的问题?

我们为什么要使用它?

4

2 回答 2

30

spec 允许您为数据和函数创建规范。规范的核心是谓词(基于现有的 Clojure 谓词)和结构,而不是您在静态类型语言中看到的基于类型的。通过基于谓词的规范,您可以编写比大多数类型系统更具表现力的规范,并使用与您的代码相同的语言。

在函数上定义的规范指定 args、返回值以及 args返回的函数的规范。最后一个允许检查比在大多数类型或合同系统中检查的范围更广的事物(轻松地)。

定义规范后,您可以使用它们:

  • 根据规范检查值是否有效
  • “符合”一个值,它为您提供该值的解析和解构版本
  • 详细解释为什么一个值不符合规范(作为字符串、标准输出或数据)
  • 使用描述性规范增强功能文档
  • 从规范生成示例数据
  • 在开发中断言一致性,但在生产中关闭它们
  • 检测开发中的无效调用或测试检测功能
  • 为指定的函数生成和运行基于属性的测试
  • 开发将仪器和测试生成与存根和模拟设施相结合的测试

您可以使用规范来改进您的开发(通过澄清和记录您的意图、捕获无效调用和断言数据有效性)、您的测试(捕获无效调用、断言有效性、生成示例数据,并为您指定的函数生成自动测试),以及您的产品(通过使用一致性进行解构)。

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

于 2016-07-22T04:42:35.763 回答
9

这些关于规范库的问题有点宽泛,尤其是“我们为什么要使用它”部分。你读过以下内容吗?

于 2016-06-12T18:01:38.440 回答