如何使用规范定义一系列大小相等的集合? (可能吗?)
How to define a sequence of equal sized collections with spec? (is it possible?)
我希望表示一系列字符串集合。内部集合应具有相同的长度。
我最初的尝试是这样的
(s/def ::stuff (s/every (s/coll-of string?) :min-count 1))
但是当我练习这个时,我得到了不同长度的内部集合。
是否有声明性的方式来指定长度都应该相同?或者这只能在规范的自定义生成器函数中指定吗?
我会将规范表述为
(s/def ::stuff
(s/and
(s/every (s/coll-of string?))
#(or (empty? %)
(apply = (map count %)))))
这很可能是 gen,但您将得到的大多数东西要么是一个空集合,要么是一个元素的集合,这两者都简单地通过了长度约束。为此,您需要一个自定义生成器。
我希望表示一系列字符串集合。内部集合应具有相同的长度。
我最初的尝试是这样的
(s/def ::stuff (s/every (s/coll-of string?) :min-count 1))
但是当我练习这个时,我得到了不同长度的内部集合。
是否有声明性的方式来指定长度都应该相同?或者这只能在规范的自定义生成器函数中指定吗?
我会将规范表述为
(s/def ::stuff
(s/and
(s/every (s/coll-of string?))
#(or (empty? %)
(apply = (map count %)))))
这很可能是 gen,但您将得到的大多数东西要么是一个空集合,要么是一个元素的集合,这两者都简单地通过了长度约束。为此,您需要一个自定义生成器。