用plumatic Sc​​hema表达“集合中的成员”

时间:2017-04-28 14:42:52

标签: clojure plumatic-schema

我想编写一个架构,其中数据结构中的元素e可以是一组项目中的任何成员; 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中表达我想要一个成员中的一个成员呢?

1 个答案:

答案 0 :(得分:2)

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"))