我想创建一个谓词函数,当某些东西与模式 X 匹配时返回 true,否则返回 false。
问问题
238 次
2 回答
3
您可以使用schema/check
which 的工作方式类似schema/validate
但直接将错误作为值返回,而不是抛出异常或未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
“为模式编译一个有效的检查器”:
(let [str-vec?-checker (schema/checker string-vector)]
(defn str-vec? [arg]
(nil? (str-vec?-checker arg))))
于 2017-04-27T13:56:20.337 回答
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
希望其他人可以提供更好的解决方案。
于 2017-04-27T13:01:28.450 回答