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

欢迎!请查阅关于页面了解更多关于此工作详情。

0
Spec
{{:pred}} 应该在如下的解释问题中(resolve)

{{s/coll-of}} 和 {{s/every-kv}} 如果其值无效应该(resolve)拥有 {{: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 未(resolve)
(::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 选项能正确生成(resolve)的 :preds。

*补丁:* clj-2168.patch

4 个答案

0

评论者:sohta

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

0
_评论者:sohta_

抱歉,我说的应该是 {{s/every-kv}},而不是 {{s/every}}。

顺便说一下,在调查这个问题之后,我发现一些其他 spec 宏在它们的解释数据中将不一致形式的 {{: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)(由ikivet报告)
...