无法使用 clojure 模式库在映射中使用字符串键验证值

Posted

技术标签:

【中文标题】无法使用 clojure 模式库在映射中使用字符串键验证值【英文标题】:cannot validate values with string keys in map using clojure schema library 【发布时间】:2016-01-12 02:30:05 【问题描述】:

我尝试使用 clojure 的 prismatic/schema 库验证地图。这是我的形状

(require '[schema.core :as s])
(def d "a" s/Str "b" s/Int)

当我尝试根据地图对其进行验证时,它会引发以下异常

(s/validate d "a" "@@#$" "b" 2)
RuntimeException More than one non-optional/required key schemata: ["a" "b"]  schema.core/find-extra-keys-schema (core.clj:705)

是我做错了什么,还是架构库不能针对字符串键进行验证?

【问题讨论】:

【参考方案1】:

你必须使用

(def d (s/required-key "a") s/Str (s/required-key "b") s/Int)

Only when using keywords as keys you can omit the required-key.

example=> (def d (s/required-key "a") s/Str (s/required-key "b") s/Int)
#'schema-examples/d
example=> (s/validate d "a" "@@#$" "b" 2)
"a" "@@#$", "b" 2
examples=>

【讨论】:

以上是关于无法使用 clojure 模式库在映射中使用字符串键验证值的主要内容,如果未能解决你的问题,请参考以下文章

连接数据库结果的下划线Clojure映射键

如何在 clojure 中映射很少使用的状态?

无法使用 fmt 库在一个字符串中格式化两个浮点数

Clojure映射中的默认值

如何在 Clojure 中递归展平任意嵌套的向量和映射?

Clojure:如何将映射条目的惰性序列转换为结构映射?