【发布时间】:2017-09-25 07:12:23
【问题描述】:
我想创建一个谓词函数,当匹配模式 X 时返回 true,否则返回 false。
【问题讨论】:
我想创建一个谓词函数,当匹配模式 X 时返回 true,否则返回 false。
【问题讨论】:
您可以使用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))))
【讨论】:
也许不是最漂亮的解决方案,但我们可以使用架构 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
希望其他人可以提供更好的解决方案。
【讨论】: