如何指定自定义指定地图的矢量

How to spec a vector of custom spec'ed maps

我有一个名为 ::cell 的自定义地图的规范,比方说

(s/def ::attr-1 int?)
(s/def ::attr-2 int?)
(s/def ::cell :req-un [::attr-1 ::attr-2])

现在我想要另一个规范 ::grid 用于仅包含这些 ::cell 地图的自定义矢量。例如,网格可能如下所示:

(let grid [{:attr-1 11, :attr-2 12} {:attr-1 21 :attr-2 22}])

是否可以使用 ::cell 的规范为此要求创建规范?

(s/def ::grid ???)

您可以使用 tuple:

(s/def ::grid (s/tuple ::cell ::cell ::cell))

coll-of指定种类和数量:

(s/coll-of ::cell :kind vector? :count 3)