使用 prismatic/schema coerce 可以在强制失败而不是错误消息时使用默认值。
我在 csv 文件中有一个值,它可以是空白(nil)或 s/Int。目前使用下面的代码我得到这个空白:
#schema.utils.ErrorContainer{:error (not (integer? nil))}
代码:
(def answers (slurp "excel/answers.csv"))
(def answers-field-schemas [s/Int s/Int s/Str s/Str s/Str s/Int s/Str s/Int s/Str s/Int s/Str s/Int s/Str s/Int s/Str])
(def answers-field-coercers
(mapv coerce/coercer
answers-field-schemas
(repeat coerce/string-coercion-matcher)))
(defn answers-coerce-fields [fields]
(mapv #(%1 %2) answers-field-coercers fields))
(def answers->data (map answers-coerce-fields (csv/parse-csv answers :end-of-line "\r")))