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/

10-13 02:28