我可以在s/multi-spec中使用s/merge吗?例如
(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方法设置什么?我只需要公共字段。
发布于 2019-02-11 17:55:25
我不确定这是否是您想要的,但我认为您会使用普通的多方法继承方法。
(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))https://stackoverflow.com/questions/54599149
复制相似问题