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

欢迎!请访问关于页面以了解此工作的更多信息。

0
Spec
应将{{:pred}}在如下explain问题中解决:

{{s/coll-of}}和{{s/every-kv}}如果其值无效,应该解决{{:pred}}函数


(::s/problems (s/explain-data (s/coll-of (fn [x] (pos? x))) [-1]))
({:path [], :pred (fn [x] (pos? x)), :val -1, :via [], :in [0]})


应该是:


(::s/problems (s/explain-data (s/coll-of (fn [x] (pos? x))) [-1]))
({:path [], :pred (clojure.core/fn [x] (clojure.core/pos? x)), :val -1, :via [], :in [0]})


其他示例


;; 与every相同
(::s/problems (s/explain-data (s/every (fn [x] (pos? x))) [-1]))
({:path [], :pred (fn [x] (pos? x)), :val -1, :via [], :in [0]})

;; :distinct选项pred未解决
(::s/problems (s/explain-data (s/coll-of pos? :distinct true) [-1 -1]))
[{:path [], :pred distinct?, :val [-1 -1], :via [], :in []}]


map-of和every-kv没有这个问题。:count、:min-count、:max-count和:kind选项可以正确生成已解决的:preds。

*补丁:* clj-2168.patch

4个答案

0

评论者:sohta

{{s/every}}也出现相同问题。

0
_评论者:sohta_

哦,对不起。我是说{{s/every-kv}},而不是{{s/every}}。

顺便说一下,在这方面调查了一些问题后,我发现一些其他的spec宏在它们的explain数据中放置了不一致的{{:pred}}形式。

例如,

{{(s/explain-data (s/tuple integer?) [])}} => {{(clojure.core/= (clojure.core/count %) 1)}}
{{(s/explain-data (s/& integer? even?) [])}} => #function[clojure.core/integer?] (not a symbol)

稍后我将提交另一个工单。
0

评论由:akiel 添加

问题 https://github.com/alexanderkiel/phrase/issues/22 与此相关。

0
参考:[https://clojure.atlassian.net/browse/CLJ-2168](https://clojure.atlassian.net/browse/CLJ-2168)(由 ikitommi 报告)
...