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

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

0 投票
Clojure
*问题*

{{keys*}} spec 中的生成器不可覆盖。

*复现*


(require '[clojure.spec.alpha :as s])
(require '[clojure.spec.gen.alpha :as gen])
(s/def ::foo (s/keys* :req-un [::a ::b]))
(s/def ::a number?)
(s/def ::b number?)
(s/valid? ::foo [:a 1 :b 2]) ;; true
(gen/generate (s/gen ::foo {::a (fn [] (gen/return 1))})) ;;=> (:a -15164 :b 24.0)


最后一个表达式应该返回一个序列,其中键 {{:a}} 后跟 {{1}},如下所示:{{(:a 1 :b 24.0)}}。

这可能是一个更普遍问题的根源:在用 {{with-gen}} 创建的 spec 上覆盖生成器似乎没有效果


(gen/generate
   (s/gen (s/with-gen ::foo
            (fn []
              (s/gen (s/cat :key-a #{:a} :val-a ::a :key-b #{:b} :val-b ::b))))
          {::a (fn [] (gen/return 1))})) ;;=> (:a -1 :b "OXi2")

1 答案

0 投票
参考: https://clojure.atlassian.net/browse/CLJ-2483 (由 borkdude 报告)
...