如何使用spec定义一系列大小相等的集合? (可能吗?)

时间:2017-02-26 12:24:07

标签: clojure clojure.spec

我希望代表一系列字符串集合。内部集合应该都具有相同的长度。

我的初步尝试看起来像这样

(s/def ::stuff (s/every (s/coll-of string?) :min-count 1))

但是当我练习这个时,我得到了不同长度的内部集合。

是否有声明性的方式来指定长度应该都相同?或者只能在规范的自定义生成器函数中指定?

1 个答案:

答案 0 :(得分:1)

我会将规范说明为

(s/def ::stuff 
  (s/and 
    (s/every (s/coll-of string?)) 
    #(or (empty? %) 
         (apply = (map count %)))))

这很可能是gen,但是你得到的大部分内容都将是一个空集合或一个元素的集合,这两个元素都可以通过长度约束。为此,你需要一个自定义的gen。