首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将spec/merge与spec/multi-spec一起使用

将spec/merge与spec/multi-spec一起使用
EN

Stack Overflow用户
提问于 2019-02-09 03:39:34
回答 1查看 240关注 0票数 3

我可以在s/multi-spec中使用s/merge吗?例如

代码语言:javascript
复制
(require '[clojure.spec :as s])

(s/def :field/common (s/keys :req-un [:field/type :field/name]
                             :opt-un [:field/default]))

(s/def :field/max-length int?)

(defmulti field-type :type)
(defmethod field-type :character [_]
  (s/merge :field/common
           (s/keys :req-un [:field/max-length])))
(defmethod field-type :foreign-key [_]
  (s/merge :field/common
           (s/keys :req-un [:field/references])))
(defmethod field-type :int [_]
  ;; ??? what to do here? - I only want the common keys
  :field/common)
(defmethod field-type :boolean [_]
  ;; ??? what to do here? - I only want the common keys
  :field/common)

(s/def ::field (s/multi-spec field-type :field/type))

我应该为:int:boolean方法设置什么?我只需要公共字段。

EN

回答 1

Stack Overflow用户

发布于 2019-02-11 17:55:25

我不确定这是否是您想要的,但我认为您会使用普通的多方法继承方法。

代码语言:javascript
复制
(require '[clojure.spec :as s])

(s/def :field/common (s/keys :req-un [:field/type :field/name]
                             :opt-un [:field/default]))

(s/def :field/max-length int?)

(defmulti field-type :type)
(defmethod field-type :character [_]
  (s/merge :field/common
           (s/keys :req-un [:field/max-length])))
(defmethod field-type :foreign-key [_]
  (s/merge :field/common
           (s/keys :req-un [:field/references])))

(defmethod field-type :field/common [_]
  :field/common)

(derive :int :field/common)
(derive :boolean :field/common)

(s/def ::field (s/multi-spec field-type :field/type))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54599149

复制
相关文章

相似问题

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