我希望代表一系列字符串集合。内部集合应该都具有相同的长度。
我的初步尝试看起来像这样
(s/def ::stuff (s/every (s/coll-of string?) :min-count 1))
但是当我练习这个时,我得到了不同长度的内部集合。
是否有声明性的方式来指定长度应该都相同?或者只能在规范的自定义生成器函数中指定?
答案 0 :(得分:1)
我会将规范说明为
(s/def ::stuff
(s/and
(s/every (s/coll-of string?))
#(or (empty? %)
(apply = (map count %)))))
这很可能是gen,但是你得到的大部分内容都将是一个空集合或一个元素的集合,这两个元素都可以通过长度约束。为此,你需要一个自定义的gen。