Clojure 可以从Plumatic模式生成谓词函数吗?

Clojure 可以从Plumatic模式生成谓词函数吗?,clojure,plumatic-schema,Clojure,Plumatic Schema,我想创建一个谓词函数,当与模式X匹配时,该函数返回true,否则返回false。也许不是最漂亮的解决方案,但我们可以使用模式验证并捕获它在失败时引发的异常 (schema/defschema string-vector [schema/Str]) (defn str-vec? [arg] (try (schema/validate string-vector arg) true (catch clojure.lang.ExceptionInfo e

我想创建一个谓词函数,当与模式X匹配时,该函数返回true,否则返回false。

也许不是最漂亮的解决方案,但我们可以使用模式
验证
并捕获它在失败时引发的异常

(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

希望其他人能提供更好的解决方案。

也许不是最漂亮的解决方案,但我们可以使用模式
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
希望其他人能提供更好的解决方案。

您可以使用类似于但直接将错误作为值返回的方法,而不是在未发现错误时引发异常或
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
“为schema编译一个高效的检查器”:

当未发现错误时,您可以使用类似于但直接返回错误的值,而不是引发异常或
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
“为schema编译一个高效的检查器”: