【发布时间】:2018-12-13 11:48:32
【问题描述】:
如何制作只接受顺序(即保留顺序)集合的规范?
例如
cljs.user=> (s/def ::path (s/+ number?))
:cljs.user/path
cljs.user=> (s/explain ::path [])
val: () fails spec: :cljs.user/path predicate: number?, Insufficient input
:cljs.spec.alpha/spec :cljs.user/path
:cljs.spec.alpha/value []
cljs.user=> (s/explain ::path [1 2 3])
Success!
果然如此,但同时要注意顺序
cljs.user=> #{1 2 3}
#{1 3 2}
cljs.user=> (s/explain ::path #{1 2 3})
Success!
这似乎没有任何意义。所以第二个问题:
为什么规范中与序列相关的表达式(cat、*、+、?)接受破坏序列的集合?
UPD 我在原始问题中弄乱了顺序/有序的区别。清理了术语。
【问题讨论】:
-
+表示 1..n(就像在正则表达式中一样)。这并不意味着任何顺序。您必须自己为此添加一个谓词。
标签: clojure clojurescript clojure.spec