在我的Clojure项目中,我正在使用Clojure Spec,但如果我需要使用像compojure-api这样的库,则需要使用Schema。
- 两者之间有什么优势?
- 为什么会考虑其中一个而不是另一个?
- 哪一个适合编译类型检查?
(Note: No changes were made to HTML tags)
在我的Clojure项目中,我正在使用Clojure Spec,但如果我需要使用像compojure-api这样的库,则需要使用Schema。
这三种方法都是为开发者提供类型安全的不同方式。它们均提供自己的DSL来描述数据的模式/类型,但在理念上有很大区别。它们都得到了积极的维护并拥有良好的社区支持。
这是一个基于我的经验的主观概述。
core typed试图通过使用额外的宏对clojure语言进行扩展,以注释函数和变量的静态类型信息。然后使用静态类型分析确保代码与类型信息匹配(即产生和消耗正确类型的数据)。
一些优点:
一些缺点:
在Schema中,您也需要编写类型注释,但类型检查在运行时发生。它鼓励您动态构建模式声明,并允许您指定要在哪里检查模式以及不想使用其功能的地方。
一些优点:
一些缺点:
Spec 是从Racket lang借鉴哲学而来的最新技术。它是Clojure 1.9版本中Clojure核心库的一部分。
基本思想是通过地图对象中(命名空间)键指定实体类型。规范声明存储在应用程序的注册表中,绑定到命名空间关键字。 Spec在序列验证方面非常强大。
一些优点:
一些缺点:
个人而言,core.typed 让人望而却步,而 core.spec 则感觉不够成熟,因此我在生产中使用 schema。我的建议如下: