2024年Clojure调研!中分享您的想法。

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

0
规范
重新分类

我的理解是,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规范。

然而,假设由于开发者的混淆,添加了与人的定义无关的另一个键,哈希表现在变为:

{:name "John"

:age 25

:voltage 220}

这将仍然符合规范。但我想让它失败!

是否有简单的方法可以使spec/keys拒绝具有不介于req或opt中的键的哈希表?

1 答案

+1

选中
 
最佳答案

对于规格1,没有简单的方法来做这件事。一个解决方案是添加一个功能,检查键集是req/opt键的超集。

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

...