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

欢迎您!请查看 关于 页面,以了解更多关于如何使用本网站的信息。

0
Spec
当一个 spec 失败时,在 'keys*' spec 中,'in' 路径指的是 conformance 之后的路径。这与其它 spec(包括 'cat' spec)不同,在这些 spec 中,'in' 路径表示原始(pre-conformed)数据中的路径。


rlwrap clj -Srepro -Sdeps '{:deps {org.clojure/spec.alpha {:mvn/version "0.2.176"}}}'
Clojure 1.9.0
user=> (require '[clojure.spec.alpha :as s])
nil
user=> (s/def ::point1 (s/cat :x int? :y int?))
user/point1
user=> (s/def ::x int?)
:user/x
user=> (s/def ::y int?)
:user/y
user=> (s/def ::point2 (s/keys* :req-un [::x ::y]))
:user/point2
user=> ;; 对于 `cat` spec,`in` 将指在 conformance 之前的位置
user=> (s/explain ::point1 [0 nil])
nil - failed: int? in: [1] at: [:y] spec: :user/point1
nil
user=> ;; 但对于 `keys*` spec,`in` 将指在 conformance 之后的位置
user=> (s/explain ::point2 [:x 0 :y nil])
nil - failed: int? in: [:y] at: [:y] spec: :user/y
nil
user=>


这对于查看默认错误信息的用户来说很令人困惑,因为示例中原始数据中并没有 ':y' 键。此外,这使得第三方库难以在上下文中显示错误值。

1 答案

0
参考:https://clojure.atlassian.net/browse/CLJ-2406(由 bbrinck 报告)
...