【问题标题】:How to define a sequence of equal sized collections with spec? (is it possible?)如何使用规范定义一系列大小相等的集合? (是否可以?)
【发布时间】:2017-02-26 12:24:07
【问题描述】:

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

我最初的尝试是这样的

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

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

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

【问题讨论】:

    标签: clojure clojure.spec


    【解决方案1】:

    我会将规范声明为类似

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      相关资源
      最近更新 更多