请在2024 年 Clojure 状态调查!中分享你的想法。

欢迎!请参阅关于页面以了解有关工作的更多信息。

0
Spec
重新分类

我的理解是,spec/keys用于验证哈希图中特定的键。然而,我还需要它拒绝包含不在: req和: opt中的键的哈希图。

为了做一个假设的例子,设想我有一个人定义的edn

{:name "John"
:age 25}

此规格可以是

(spec/def ::name string?)
(spec/def ::age int?)
(spec/def ::person (spec/keys :req-un [::name ::age]))

上面的定义将符合此::person规范。

但是,假设由于开发人员的误解,添加了一个与Person定义无关的另一个键,现在哈希图是

{:name "John"
:age 25
:voltage 220}

然而它还是会符合规范。但我希望它失败!

有没有简单的方法可以让spec/keys拒绝一个既不是req也不是opt的键的哈希图?

1 答案

+1

已选中
 
最佳答案

规格1中,没有直接的简单方法来做这件事。一种解决办法是添加一个函数,该函数检查键集是否为req/opt键的超集。

规格2新增了一个“关闭规格检查”选项,可以在验证过程中使用(重要的是,这是一个在检查时而不是规范部分使用的选项)。

...