clojure.spec/coll-of
采用 :gen-max
选项来限制生成的样本大小。
是否有 clojure.spec/+
的类似物?
最佳答案
s/*
和 s/+
不采用像 :gen-max
这样的选项,但那些重复的正则表达式规范会执行 take clojure.spec.alpha/*recursion-limit*
into account 。我认为这是相当粗粒度的控制,对像这样的简单规范没有实际影响,对于任何正 *recursion-limit*
来说,它似乎总是生成约 200 个元素的最长序列:
(binding [clojure.spec.alpha/*recursion-limit* 1]
(->> (gen/sample (s/gen (s/* int?)) 200)
(map count)
(apply max)))
限制生成序列长度的一种方法是提供自定义生成器:
(s/def ::ints
(s/with-gen
(s/+ int?)
#(gen/vector gen/int 1 10)))
(gen/sample (s/gen ::ints) 200)
这应该始终生成一个由 1-10 个整数组成的向量。
关于clojure - 如何使用 `clojure.spec/+` 限制生成样本的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44457155/