"a member in set" 的表达式与 plumatic Schema
Expression for "a member in set" with plumatic Schema
我想编写一个模式,其中数据结构中的元素 e 可以是项目集合 S 中的任何成员; e ∈ S。在 Clojure Spec 中,这用如下集合表示:
(spec/def ::key-set #{:subprocess :leiningen :nrepl})
(gen/sample (spec/gen ::key-set))
; => (:nrepl :subprocess :subprocess :leiningen :subprocess :nrepl :subprocess :leiningen :nrepl :subprocess)
一组关键字。
然而,在 Schema 中,集合用于表示一组事物,而不是集合中的一个元素成员。那么我如何在 Schema 中表达我想要一个集合中的一个成员呢?
schema.core/enum
就是您要找的。
user=> (schema.core/validate (schema.core/enum "a" "b" "c") "a")
"a"
=> (schema.core/validate (schema.core/enum "a" "b" "c") "z")
clojure.lang.ExceptionInfo: Value does not match schema: (not (#{"a" "b" "c"} "z"))
我想编写一个模式,其中数据结构中的元素 e 可以是项目集合 S 中的任何成员; e ∈ S。在 Clojure Spec 中,这用如下集合表示:
(spec/def ::key-set #{:subprocess :leiningen :nrepl})
(gen/sample (spec/gen ::key-set))
; => (:nrepl :subprocess :subprocess :leiningen :subprocess :nrepl :subprocess :leiningen :nrepl :subprocess)
一组关键字。
然而,在 Schema 中,集合用于表示一组事物,而不是集合中的一个元素成员。那么我如何在 Schema 中表达我想要一个集合中的一个成员呢?
schema.core/enum
就是您要找的。
user=> (schema.core/validate (schema.core/enum "a" "b" "c") "a")
"a"
=> (schema.core/validate (schema.core/enum "a" "b" "c") "z")
clojure.lang.ExceptionInfo: Value does not match schema: (not (#{"a" "b" "c"} "z"))