如何在clojure中使用schema.core / enum?

时间:2017-03-04 01:11:21

标签: clojure enums

鉴于一个由棱柱schema.core/enum制作的枚举,让我们说:

(def myenumtype (schema.core/enum "a" "b" "c"))

如何为特定的枚举项设置另一个def?在这里,我想将e设置为" a"枚举项目。

(def e (???  myenumtype))

我如何将其与特定的枚举进行比较?在这里,我想检查e是否等于"a"枚举类型。

(= e ((??? "a") myenumtype))

1 个答案:

答案 0 :(得分:1)

我认为你误解了Schema是如何工作的。您没有创建枚举类型,而是创建一个验证器来检查特定值是否等于其中一个枚举值。

在您的情况下,您需要做的就是:

(def e "a")

以下是REPL会话的示例:

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