Выражение для "члена в наборе" со схемой plumatic

Я хочу написать схему, в которой элемент 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)

для набора ключевых слов.

В Схеме, однако, набор используется для обозначения набора вещей, а не одного элемента-члена набора. Итак, как мне выразить в Схеме, что я хочу одного члена из набора?

1 ответ

Решение

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"))
Другие вопросы по тегам