2024 Clojure现状调查!中分享您的想法。

欢迎!请参阅关于页面了解此工作方式的相关更多信息。

0
Spec
规范别名是一种有用的实践。例如,常见的':myproj/name'规范可能用于两个不同的键,例如':myproj.user/name'和':myproj.admin/name'。

然而,当它们在规范中使用时,:via路径将包含重复,例如包含':myproj/name'两次。

重现

1. clj -Srepro -Sdeps '{:deps {org.clojure/spec.alpha {:mvn/version "0.2.176"}}}'


(require '[clojure.spec.alpha :as s])
(s/def :myproj/name (s/and string? #(< 2 (count %))))
(s/def :myproj.user/name :myproj/name)
(s/def :myproj/user-args (s/cat :name :myproj.user/name))
(-> (s/explain-data :myproj/user-args [""]) ::s/problems pprint)

[{:path [:name],
  :pred (clojure.core/fn [%] (clojure.core/< 2 (clojure.core/count %))),
  :val "",
  :via [:myproj/user-args :myproj/user-args :myproj/name :myproj/name],
  :in [0]}]


实际:问题的':via'路径为'[:myproj/user-args :myproj/user-args :myproj/name :myproj/name]'。

预期:我期望在':via'中看到':myproj.user/name'规范,因为':myproj/user-args'规范是以':myproj.user/name'为条件构建的。

1 答案

0
...