1

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

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

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

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

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

4

1 回答 1

2

我会将规范声明为

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

这可能会生成,但是您将获得的大多数东西要么是一个空集合,要么是一个元素的集合,它们都可以轻松通过长度约束。为此,您需要一个自定义生成。

于 2017-02-26T13:24:10.140 回答