在我的 Clojure 项目中,我使用的是 Clojure Spec 但如果我需要使用像 compojure-api 这样的库,那么我需要使用 Schema。
最佳答案
这只是为开发人员提供某种类型安全性的三种不同方法。这三者都提供了自己的 DSL 来描述数据的模式/类型,但它们的理念非常不同。他们都得到积极维护,并拥有一个不错的社区。
这是 自以为是的概述根据我的经验。
核心类型
core typed 尝试使用附加宏来扩展 clojure 语言,以使用静态类型信息注释函数和变量。然后它使用静态类型分析来确保代码匹配类型信息(即它产生和使用正确类型的数据)。
一些优势:
一些缺点:
架构
在 Schema您还编写类型注释,但类型检查发生在运行时。它鼓励您动态构造模式声明,并允许您指定要检查模式的位置以及不希望其功能性的位置。
一些优势:
一些缺点:
规范
Spec是最新的玩家,其哲学是从 Racket lang 借来的.它是(将成为)Clojure 1.9 版中 Clojure 核心库的一部分。
基本思想是通过映射对象中的(命名空间)键指定实体类型。规范声明存储在绑定(bind)到命名空间关键字的应用程序注册表中。 Spec 在序列验证方面非常强大。
一些优势:
一些缺点:
就个人而言,core.typed 感觉很吓人,而 core.spec 感觉不成熟,所以我在生产中使用模式。我的建议如下:
关于Clojure Spec vs Typed vs Schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46581570/