应指定一个生成大小为 4 或 5 的集合的规格,但实际上它生成的大小为 4 到 8 的集合
(require '[clojure.spec.alpha :as s] '[clojure.spec.gen.alpha :as gen]) (map count (gen/sample (s/gen (s/coll-of char? :min-count 4 :gen-max 5)))) ;; (4 7 8 8 4 7 4 5 5 7)
原因: s/every-impl 中的最大逻辑是: }。如果有最大计数,则使用它,否则使用 gen-max 或 2*min-count 中较大的一个。在本例中,2*min-count 是 8。看起来我们不应该生成超过 gen-max 的东西,因此建议将此逻辑更改为: }。
修复: clj-2202.patch