首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure.spec或“相当于"s/and”

Clojure.spec或“相当于"s/and”
EN

Stack Overflow用户
提问于 2018-05-06 18:14:37
回答 1查看 700关注 0票数 3

我喜欢使用clojure.spec;它帮助发现了更接近原因的数据错误。目前,我正在使用它来验证对web服务器请求的响应,但是对于允许两种不同的映射结构响应的clojure.spec操作,我遇到了困难。

在我的数据中,web服务器请求有两个可能的响应:

{:assignment "1232123"}

{:no-more-assignments true}

我可以使用multi-spec,但是对于一些简单的东西,比如每个案例都有一个规范,并且定义规范如下:

代码语言:javascript
复制
(s/def ::response
  (s/or ::case-1 ::case-2))

是否有我忽略的语法,还是需要使用multi-spec

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-06 18:30:43

您可以将orandkeys规范一起使用:

代码语言:javascript
复制
(s/def ::assignment string?)
(s/def ::no-more-assignments boolean?)
(s/def ::response
  (s/keys :req-un [(or ::assignment ::no-more-assignments)]))

(s/explain ::response {:assignment "123"})
;; Success!
(s/explain ::response {:foo true})
;; val: {:foo true} fails spec: :sandbox.so/response predicate: (or (contains? % :assignment) (contains? % :no-more-assignments))
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50203038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档