问题标签 [clojure.spec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1360 浏览

clojure - Clojure 规范强制嵌套映射值

我像这样强制映射值:

但是,我看不到如何使用以下地图来做同样的事情:

应该如何::config定义?另外,最好有{::nested-data {::port "12345"}}代替吗?

0 投票
1 回答
1600 浏览

clojure - Clojure 规范和记录构造函数

如果我定义了以下记录:

以及以下内容:

如何确保您不能创建不符合 ::person 规范的 Person?换句话说,以下应该引发异常:

我试过了:

但打电话:

不会引发异常。

然而:

确实产生了预期:

谢谢

0 投票
2 回答
559 浏览

clojure - 在 clojure.spec 中提供默认值

有没有办法为中提到的键指定默认值(s/keys :opt [::k1 ::k2])

就像是:

还是在 clojure.spec 之外处理默认值更习惯?

0 投票
0 回答
76 浏览

clojure - 在 clojure.spec 中,`s/or` 和 `s/alt` 有什么区别?

s/or在 clojure.spec 中,和有什么区别s/alt?请提供一些很好的例子来解释差异。

0 投票
2 回答
951 浏览

clojure - 您如何将值的序列/集合指定为 clojure 中函数的一个值?

我试图以这样一种方式来指定一个函数,它需要一个两个字符串的序列作为函数的第一个参数。

这是我尝试过的:

要清楚。我遇到的问题是exercise-fn解释了fdef我给它的规范,这意味着它可以向我的函数传递两个参数,两个参数都是 type string?。我想要的是得到一个参数,由作为一个集合传递的两个字符串组成。

0 投票
1 回答
497 浏览

clojure - 命名空间关键字使 JSON 的规范无效

我正在使用 Clojure.spec 来验证 JSON 的结构(然后将其转换为另一种格式):

(这里s指的是clojure.spec命名空间和jsonto clojure.data.json。)

从上面可以看出,s/valid?解析 JSON 的失败是因为关键字没有命名空间。

如何调整代码以使 JSON 被视为有效?

0 投票
1 回答
683 浏览

clojure - 用 clojure.spec 解析

考虑以下数据:

它是一个带有一个键的哈希映射:具有向量向量值的名称。内部向量必须包含一个字符串作为第一个元素,并且可以选择包含一个关键字 :lucky 作为第二个元素。

前两句应该用clojure.spec- 让我们从向量中的项目开始:

这行得通。但是,如果只有一种选择。解析后的结果看起来会不会更好:

这可以在 clojure.spec 中完成吗?

有了这个,人们可以继续:

但是,看起来它通过了测试,但为什么不再解析这些项​​目?

编辑: 这可以通过从 alpha7 切换到 alpha10 版本来解决,其中 coll-of 只接受一个参数

最后,我的规范看起来像前面描述的警告:

0 投票
1 回答
1056 浏览

clojure - fdef 的 clojure.spec 验证

我正在尝试使用版本在clojure.spec1.9.0-alpha11中编写一个更高阶的函数,并且无法获得针对返回的函数执行的验证。

使用 clojure.spec 指南的高阶函数部分中的示例,我将adder表单定义为:

如指南中所述,我创建了一个规范:

当我在 repl 中执行它时,会抛出异常而不是所需的规范验证错误:

我试图用(stest/instrument `adder). 虽然这适用于函数,但它不适用于高阶函数

0 投票
1 回答
251 浏览

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

随着关于 Clojure 1.9 中新的 clojure.spec 功能的截屏视频和博客开始出现,很明显 clojure.spec 能够完成许多以前由更“传统”的自动化测试库(如 clojure)执行的风险缓解.test、midje、speclj 和 test.check。

clojure.test 的功能是否会在 clojure.spec 中复制?如果您今天开始构建一个在 Clojure 1.9+ 下运行的新应用程序,您是否会搁置我上面列出的测试库,而仅仅依靠 clojure.spec 来为您的应用程序行为提供类似程度的信心?

0 投票
1 回答
752 浏览

clojure - 将 Clojure Spec 与 Datomic 实体一起使用

假设我有以下规格:

然后我从 Datomic 获取一个实体:

如果我尝试检查与规范的一致性,它会失败,因为实体不是地图:

我的应用程序具有将实体作为参数的函数,并且希望避免为了让规范检测在开发中工作而不得不将实体具体化为无处不在的映射。

我应该如何通过规范验证实体?