可以从 Plumatic Schema 创建谓词函数吗?
Can one make a predicate function from a Plumatic Schema?
我想做一个谓词函数,当某些东西匹配模式 X returns 为真,否则为假。
也许不是最漂亮的解决方案,但我们可以使用模式 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
希望其他人可以提供更好的解决方案。
可以直接使用schema/check
which works like schema/validate
但returns错误作为值,而不是抛出异常或nil
没有发现错误时:
(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
还有schema/checker
其中"compiles an efficient checker for schema":
(let [str-vec?-checker (schema/checker string-vector)]
(defn str-vec? [arg]
(nil? (str-vec?-checker arg))))
我想做一个谓词函数,当某些东西匹配模式 X returns 为真,否则为假。
也许不是最漂亮的解决方案,但我们可以使用模式 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
希望其他人可以提供更好的解决方案。
可以直接使用schema/check
which works like schema/validate
但returns错误作为值,而不是抛出异常或nil
没有发现错误时:
(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
还有schema/checker
其中"compiles an efficient checker for schema":
(let [str-vec?-checker (schema/checker string-vector)]
(defn str-vec? [arg]
(nil? (str-vec?-checker arg))))