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

欢迎!有关如何使用本站的更多信息,请参阅关于页面。

0
Spec
{{:pred}}应该在解释问题如

{{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}}。

BTW,在这方面的调查之后,我发现一些其他的spec宏在它们的解释数据中放置了不一致的{{:pred}}形式。

例如,

{{(s/explain-data (s/tuple integer?) [])}} => {{(clojure.core/= (clojure.core/count %) 1)}}
{{(s/explain-data (s/& integer? even?) [])}} => #function[clojure.core/integer?] (不是一个符号)

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

评论者:akiel

与以下问题相关:[https://github.com/alexanderkiel/phrase/issues/22](https://github.com/alexanderkiel/phrase/issues/22)

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