clojure规范,关键字应为零
我有一个简单的问题。clojure规范,关键字应为零,clojure,Clojure,我有一个简单的问题。 给定一个spec def,我想使用相同的spec,但只作为nillable变量 例如 (s/def::uuid uuid?) (s/def::问题规范(s/keys:req un[::uuid])) (s/def::无问题规范(s/keys:req-un[::uuid]) 由于您已将::uuid定义为不可为零,因此无法在映射/键集中对可为零的值使用::uuid键。这是有意的-规范中的限定键是全局定义的 在这种情况下,您可以将::uuid指定为nillable,然后限制密钥集
给定一个spec def,我想使用相同的spec,但只作为nillable变量 例如
(s/def::uuid uuid?)
(s/def::问题规范(s/keys:req un[::uuid]))
(s/def::无问题规范(s/keys:req-un[::uuid]) 由于您已将::uuid
定义为不可为零,因此无法在映射/键集中对可为零的值使用::uuid
键。这是有意的-规范中的限定键是全局定义的
在这种情况下,您可以将::uuid
指定为nillable,然后限制密钥集的非nillable版本:
(s/def ::uuid (s/nilable uuid?))
(s/def ::problem-spec (s/and (s/keys :req-un [::uuid])
#(some? (:uuid %))))
(s/def ::nilable-problem-spec (s/keys :req-un [::uuid])) ;; as previously
或者,由于您正在处理映射中的非限定键,因此还可以定义两个不同语义的限定uuid
关键字:
(s/def :nillable/uuid (s/nilable uuid?))
(s/def :non.nil/uuid uuid?)
(s/def ::problem-spec (s/keys :req-un [:non.nil/uuid])))
(s/def ::nilable-problem-spec (s/keys :req-un [:nillable/uuid]))
(s/def :nillable/uuid (s/nilable uuid?))
(s/def :non.nil/uuid uuid?)
(s/def ::problem-spec (s/keys :req-un [:non.nil/uuid])))
(s/def ::nilable-problem-spec (s/keys :req-un [:nillable/uuid]))