2017-04-27 9 views

答えて

3

あなたはschema/validateのように動作しますが、代わりに投げる例外またはnilの値として直接エラーを返すschema/checkを使用することができます。また、「スキーマのための効率的なチェッカーをコンパイルschema/checkerあり

(schema/defschema string-vector 
    [schema/Str]) 

(defn str-vec? [arg] 
    (nil? (schema/check string-vector arg))) 

(str-vec? ["hi"]) ; => true 
(str-vec? ["hi" 5]) ; => false 

":

(let [str-vec?-checker (schema/checker string-vector)] 
    (defn str-vec? [arg] 
    (nil? (str-vec?-checker arg)))) 
0

おそらく最も美しい解決策ではありませんが、スキーマvalidateを使用して、失敗時にスローする例外をキャッチできます。

(schema/defschema string-vector 
    [schema/Str]) 

(defn str-vec? [arg] 
    (try (schema/validate string-vector arg) 
     true 
     (catch clojure.lang.ExceptionInfo e 
     false))) 

(str-vec? ["hi"]) ; => true 
(str-vec? ["hi" 5]) ; => false 

うまくいけば、他の誰かがより良い解決策を提供できます。エラーが発見されないとき

関連する問題