2017-03-04 1 views
1

Gegeben eine Enumeration aus prismatischen schema.core/enum gemacht, sagen wir mal:Wie man schema.core/enum in clojure benutzt?

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

Wie kann ich einen anderen def zu einem bestimmten Aufzählungspunkt gesetzt? Hier möchte ich e auf den "a" enum Artikel setzen.

(def e (??? myenumtype)) 

Und wie kann ich das mit einer bestimmten Enum vergleichen? Hier würde ich gerne überprüfen, ob e gleich "a" Enum-Typ ist.

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

Antwort

1

Ich denke, Sie missverstehen, wie Schema funktioniert. Wenn Sie keinen Aufzählungstyp erstellen, erstellen Sie einen Prüfer, der überprüft, ob ein bestimmter Wert einem der Aufzählungswerte entspricht.

In Ihrem Fall alles, was Sie tun müssen, ist:

(def e "a") 

Hier ist ein Beispiel REPL Sitzung:

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