Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure prismatic/schema强制的默认值,而不是错误消息_Clojure_Plumatic Schema - Fatal编程技术网

Clojure prismatic/schema强制的默认值,而不是错误消息

Clojure prismatic/schema强制的默认值,而不是错误消息,clojure,plumatic-schema,Clojure,Plumatic Schema,使用prismatic/schema强制可以在强制失败时使用默认值,而不是错误消息 我在csv文件中有一个值,它可以是空白(nil)或s/Int。目前,通过以下代码,我得到了空白值: #schema.utils.ErrorContainer{:error (not (integer? nil))} 代码: 一,。您得到的错误不是强制错误,而是验证错误。值必须符合初始架构 二,。要修复它,您需要为可能是nil的字段释放模式。假设它是第二个字段: (def answers-field-schem

使用prismatic/schema强制可以在强制失败时使用默认值,而不是错误消息

我在csv文件中有一个值,它可以是空白(nil)或s/Int。目前,通过以下代码,我得到了空白值:

 #schema.utils.ErrorContainer{:error (not (integer? nil))}
代码:


一,。您得到的错误不是强制错误,而是验证错误。值必须符合初始架构

二,。要修复它,您需要为可能是
nil
的字段释放模式。假设它是第二个字段:

(def answers-field-schemas [s/Int (s/maybe s/Int) ...])
此时,您将获得
nil
s,而不是
nil
字段的错误:

user> (answers-coerce-fields ["1" nil])
[1 nil]
三,。如果强制后确实需要默认值而不是
nil
s,则需要自定义强制匹配器。大概是这样的:

(import 'schema.core.Maybe)

(defn field-matcher-with-default [default]
  (fn [s]
    (let [string-coercion-fn (or (coerce/string-coercion-matcher s)
                                 identity)
          maybe-coercion-fn (if (instance? schema.core.Maybe s)
                              (fnil identity default)
                              identity)]
      (comp
       string-coercion-fn
       maybe-coercion-fn))))
还可以修改以前的强制器,如下所示:

(def answers-field-coercers
  (mapv coerce/coercer
        answers-field-schemas
        ;; your default here
        (repeat (field-matcher-with-default -1))))
然后:

user> (answers-coerce-fields ["1" nil])
[1 -1]
请注意,默认值也必须符合schema,因此不能为schema
(s/maybe s/Int)
设置类型为
String
的默认值

user> (answers-coerce-fields ["1" nil])
[1 -1]