重现
(require '[clojure.spec.alpha :as s]
(s/def :foo/user-map (s/map-of string? int?))
(s/explain-data :foo/user-map {"hi" "foo"})
;; 实际值
;; #:cljs.spec.alpha{:problems
;; ({:path [1],
;; :pred int?,
;; :val "foo",
;; :via [:foo/user-map],
;; :in ["hi" 1]})}
;; 预期:`:in`值应该是 ["hi"] ?
(s/explain-data :foo/user-map {:hi 2})
;; 实际值
;; #:cljs.spec.alpha{:problems
;; ({:path [0],
;; :pred string?,
;; :val :hi,
;; :via [:foo/user-map],
;; :in [:hi 0]})}
;; 预期:我不确定,因为路径不能“指向”键
动机:给一些顶层数据(在这种情况下,`{"hi" "foo"}`)和一个`:in`路径,我希望能找到有问题的数据(在这种情况下,"foo")。
在这种情况下,如果映射的值不符合,`:in`路径与像`get-in`这样的函数不相容,但它可能是。
在这种情况下,如果映射的键不符合,就无法使用`get-in`“指向”键,所以我不确定正确的解决方案是什么。
我不知道与`get-in`的兼容性是否是必需的:如果规范提供了一个使用“规范”路径(即可以指向键的路径)完成相同任务的函数,那就没问题。