我想创建一个谓词函数,当某些东西与模式X匹配时返回true,否则返回false。
答案 0 :(得分:3)
您可以使用schema/check
,其工作方式与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))))
答案 1 :(得分: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
希望其他人可以提供更好的解决方案。