ClojureDocs

命名空间

clojure.spec.alpha

The spec library specifies the structure of data or functions and provides
  operations to validate, conform, explain, describe, and generate data based on
  the specs.

  Rationale: https://clojure.org/about/spec
  Guide: https://clojure.org/guides/spec
clojure.spec.alpha 中的变量

*^%

&
采用正则表达式 op re 和断言。返回一种正则表达式 op,它按照 re 来使用输入,但会对产生的值使用断言的合取和可能执行的任何验证。
*
返回一种正则表达式 op,它与匹配 pred 的零个或多个值匹配。只有在至少有一个匹配项时才生成匹配项的向量
*coll-check-limit*
使用“every”指定的集合规范中验证的元素数
*coll-error-limit*
使用“every”指定的集合规范中由 explain 报告的错误数
*compile-asserts*
如果为真,编译器将启用规范断言,这些断言随后可以通过 check-asserts? 处于运行时控制之下。如果为假,编译器将消除所有规范断言开销。请参见“断言”。最初设置为 clojure.spec.compile-asserts 系统属性的布尔值。默认为真。
*explain-out*
没有文档说明
*fspec-iterations*
在 conform 期间将对 fspec 指定的匿名 fn 进行的生成性测试次数
*recursion-limit*
在生成期间通过分支规范(or/alt/*/opt-keys/multi-spec)可以进行递归的次数上的软限制。此后将选择一个非递归分支。
+
返回一种正则表达式 op,它与一个或多个匹配 pred 的值匹配。生成匹配项的向量
?
返回一种正则表达式 op,它与零个或一个匹配 pred 的值匹配。如果匹配,生成一个值(而不是集合)。

a

abbrev
没有文档说明
alt
采用键+断言对,例如 (s/alt :even even? :small #(< % 42))。返回一种正则表达式 op,它返回包含第一个匹配断言的键和相应值的映射条目。因此,“key”和“val”函数可用于引用标记返回的组件
alt-impl
不要直接调用此方法,请使用“alt”
amp-impl
不要直接调用此方法,请使用“ampersand”
and
采用断言/规范表单,例如 (s/and even? #(< % 42))。返回返回合规值的规范。连续的合规值将传播到其余断言。
and-spec-impl
不要直接调用此方法,请使用“and”
assert
spec 检查断言表达式。如果根据 spec x 有效,则返回 x,否则抛出带有说明数据及 ::failure of :assertion-failed 的 ex-info。可以在编译时间或运行时禁用:如果编译时的 *compile-asserts* 为 false,则编译为 x。默认为 'clojure.spec.compile-asserts' 系统属性的值,如果没有设置,则为 true。如果运行时的 (check-asserts?) 为 false,则始终返回 x。默认为 'clojure.spec.check-asserts' 系统属性的值,如果没有设置,则为 false。可以使用 (check-asserts bool) 切换 check-asserts?
assert*
不要直接调用,请使用“assert”。

c

cat
获取键和谓词对,例如 (s/cat :e even? :o odd?) 返回匹配序列中(所有)值的正则操作,返回包含每个谓词键和相应值的地图。
cat-impl
不要直接调用,请使用“cat”。
check-asserts
启用或禁用已使用“*compile-asserts*”为 true 编译的 spec 断言。请参见“assert”。最初设置为 clojure.spec.check-asserts 系统属性的布尔值。默认为 false。
check-asserts?
返回 check-asserts 设置的值。
coll-of
返回符合谓词项目集合的规范。与“every”不同,“coll-of”将彻底符合每一项。与“every”相同选项。如果提供了 conform,它将生成与 :into 相对应集合,否则将匹配输入集合,并尽可能避免重建。另请参阅 - every、map-of
conform
给定一个规范和一个值,如果值与规范不匹配,则返回 :clojure.spec.alpha/invalid,否则返回(可能经过解构)的值。
conform*
没有文档说明
conformer
获取语义上与 conform 一致的谓词函数,即它应该返回 (可能已转换) 的值或 :clojure.spec.alpha/invalid,然后返回将其用作谓词/conformer 的规范。可以选择获取一个执行第一个结果取消格式化的第二函数

d

def
给定一个名称空间限定关键字或可解析符号 k,一个规范、规范名称、谓词或正则操作,在映射中添加一个条目将 k 映射到规范。使用 nil 移除注册表中 k 的一个条目。
def-impl
不要直接调用,请使用“def”。
describe
返回规范简短说明,数据格式
describe*
没有文档说明
double-in
64 位浮点数规范。选项::infinite? - 允许 +/- 无穷大(默认 true):NaN? - 允许 NaN(默认 true):min - 最小值(包含,默认无):max - 最大值(包含,默认无)

e

every
获取谓词,并针对该谓词验证集合元素。请注意,“every”不会进行彻底检查,而是对 *coll-check-limit* 个元素进行采样。因此,它不会对元素进行任何符合性验证。“explain”将报告最多 *coll-error-limit* 个问题。因此,“every”应适合于潜在的大集合。需要几个 kwargs 选项来进一步约束集合::kind - 集合类型必须满足的谓词,例如 vector?(默认 nil)请注意,如果指定了 :kind 但未指定 :into,则每项均必须生成才能生成 every。:count - 指定集合完全具有此数量(默认 nil):min-count、:max-count - 集合计数 (<= min-count count max-count)(默认 nil):distinct - 所有元素都不同(默认 nil)控制 gen 的其他参数::gen-max - 要生成的最大集合大小(默认 20):into - [ ]、()、{}、#{} 之一 - 要生成的默认集合(默认:如果提供了 :kind 谓词,则由其生成空的集合,否则为 [])可选择获取 :gen 生成器函数,它必须是一个无参数的函数,返回 test.check 生成器另请参阅 - coll-of、every-kv
every-impl
不要直接调用,请使用“every”、“every-kv”、“coll-of”或“map-of”。
every-kv
与“every”类似,但获取独立键和值谓词,并用于关联集合。与“every”相同选项,:into 默认为 {} 另请参阅 - map-of
练习
生成一个数字(默认值为 10)的与 spec 兼容的值,并对其进行映射一致, 返回 [val conformed-val] 元组的序列。可以采用生成器的方式根据 gen 来替代映射
exercise-fn
对由 sym(一个符号)命名的函数进行练习,通过将该函数应用于其 args spec 生成的 n(默认值为 10)个样本。当提供 fspec 时,将使用其 arg spec,并且 sym-or-f 可以是函数。返回 [args ret] 元组的序列。
explain
给定一个 spec 和一个不符合的 value,可将说明打印到 *out*。
explain*
没有文档说明
explain-data
给定一个 spec 和一个应该符合的 value x,如果 x 符合,则返回 nil;否则,返回一个至少包含键 ::problems 的映射,其值为 problem-maps 的集合,问题映射至少包含描述谓词和该路径上失败的值的 :path :pred 和 :val 键。
explain-data*
没有文档说明
explain-out
使用 *explain-out* 中的打印机(默认情况下为 explain-printer)将说明数据(根据 'explain-data')打印到 *out*。
explain-printer
explain-data 的默认打印机。nil 表示验证成功。
explain-str
给定一个 spec 和一个不符合的值,返回一个作为字符串的说明。

f

fdef
获取指定函数的符号,以及以下一个或多个选项::args 函数参数的正则表达式规范,因为它们是一个要传递给 apply 的列表——通过这种方式,一个规范可以处理具有多个元的函数::ret 函数返回值的规范::fn args 和 ret 之间关系的规范——传递的值为 {:args conformed-args :ret conformed-ret},并且预期它包含那些值相关的谓词。使用 resolve 为 fn-sym 限定条件,或在找不到解析时使用 *ns*。在全局注册表中注册一个 fspec,可以通过使用 var 或完全限定的符号调用 get-spec 来检索它。注册后,函数规格包括在文档中,由仪器检查,由运行器 clojure.spec.test.alpha/check 测试,并且(如果宏)用于在宏展开期间解释错误。请注意,:fn 规范要求存在 :args 和 :ret 规范才能符合值,因此如果缺少 :args 或 :ret,则将忽略 :fn 规范。返回限定的 fn-sym。例如,要为符号函数注册函数规范: (s/fdef clojure.core/symbol :args (s/alt :separate (s/cat :ns string? :n string?) :str string? :sym symbol?) :ret symbol?)
form
返回 spec 作为数据
fspec
获取 :args :ret 和(可选):fn 的 kwargs,其值为谓词,并返回一个 spec,其 conform/explain 会采用一个函数,并使用生成测试对其进行验证。已验证的值始终是函数本身。有关创建 fspec 并对其进行注册的单个操作,以及 :args、:ret 和 :fn 的完整说明,请参见 'fdef'。fspec 可以生成验证参数和根据 :ret 规范构造返回值的函数,如果存在则忽略 :fn 规范。还可以选择 :gen 生成器函数,它必须是一个没有参数的函数,用于返回一个 test.check 生成器。
fspec-impl
不要直接调用它,请使用 'fspec'

g

gen
给定一个 spec,返回它的生成器,如果无法构造,则抛出异常。或者可以提供一个替代映射,该映射应将 spec 名称或路径(关键字向量)映射到无参数生成器创建函数。它们将替代那些名称/路径处的生成器。请注意,父生成器(在 spec 或覆盖映射中)将取代所有子树的生成器。正则运算符的生成器必须始终返回一个顺序集合(即,s/? 的生成器应返回一个空序列/向量或一个包含一个项目的序列/向量)
gen*
没有文档说明
get-spec
返回为关键字/符号/变量 k 注册的 spec,或者返回 nil。

i

inst-in
返回一个在开始(含)到结束(不含)范围内验证 inst 的规范。
inst-in-range?
如果 inst 在开始或开始之后并且在结束之前,则返回 true
int-in
返回一个规范,它验证范围内固定精度的整数,范围从 start(包括)到 end(不包括)。
int-in-range?
如果 start <= val,val < end 并且 val 是固定精度的整数,则返回 true。
invalid?
测试一个符合的返回值的有效性

k

keys
创建并返回一个 map 验证规范。:req 和 :opt 都是命名空间限定关键字的向量。验证器将确保存在:req 键。:opt 键用作文档,生成器可以使用它。:req 键向量支持用于键组的“and”和“or”:(s/keys:req [::x ::y(或::secret(和::user ::pwd))]:opt [::z])还有:req 和:opt 的 -un 版本。通过这些版本,您可以将不合格的键连接到规范。在每种情况下,传递完全限定关键字,这些关键字指定规范,但预期并检查不合格的键(具有相同名称组件)并在符合性时间进行检查,并在生成期间生成:(s/keys:req-un [:my.ns/x:my.ns/y])上面说键:x 和:y 是必需的,并且将由规范(如果存在)分别验证和生成:my.ns/x:my.ns/y。此外,所有命名空间合格键的值都将被任何已注册的规范验证(并且可能解构)。注意:根据设计,不支持内联值规范。可选地采用:gene generator-fn,它必须是一个 no args 的 fn,返回一个 test.check 生成器。
keys*
采用与 spec/keys 相同的参数,并返回一个 regex op,它匹配键/值序列,将它们转换成 map,并使用对应的 spec/keys 调用对该 map 进行符合性检查:user=>(s/conform(s/keys:req-un [::a ::c]){:a 1:c 2}){:a 1,:c 2}user=>(s/conform(s/keys*:req-un [::a ::c])[:a 1:c 2]){:a 1,:c 2}结果 regex op 可以组合成更大的 regex:user=>(s/conform(s/cat:i1 integer?:m(s/keys*:req-un [::a ::c]):i2 integer?) [42:a 1:c 2:d 4 99]){:i1 42,:m{:a 1,:c 2,:d 4},:i2 99}

m

map-of
返回一个 map 规范,其键满足 kpred,其值满足 vpred。与“every-kv”不同,“map-of”将详尽地满足每个值。与“every”相同选项,:kind 默认为 map?,其中添加了::conform-keys - 确认键和值(默认值为 false)另请参见 - every-kv
map-spec-impl
不要直接调用此项,请使用带 map 参数的“spec”
maybe-impl
不要直接调用此项,请使用“?”
merge
采用 map 验证规范(例如“keys”规范),并返回满足所有规范的已确认 map 的规范。与“and”不同,“merge”可以生成满足谓词并集的 map。
merge-spec-impl
不要直接调用此项,请使用“merge”
multi-spec
采用 spec/predicate 返回多方法的名称以及标签恢复关键字或 fn(retag)。返回一个规范,在进行数据确认或解释时,该规范会将数据传递到多方法以获取适当的规范。您例如可以使用 multi-spec 来动态地、可扩展地将规范与“标记”数据相关联(即,其中一个字段指示其余结构的形状的数据)。(defmulti mspec:tag)方法应该忽略其参数并返回一个谓词/规范:(defmethod mspec:int [_](s/keys:req-un [::tag ::i]))在生成期间,使用 retag 为生成的值重新加上匹配的标签。retag 可以是一个关键字,它将 dispatch 标签关联到哪个键中,也可以是生成值和 dispatch 标签的 fn,它应返回一个重新加上适当标签的值。请注意,因为标签本身包含一个开放式集,所以标签键规范无法枚举值,但例如可以测试 keyword?。另请注意,多方法的 dispatch 值将包含在路径中,即在报告和生成覆盖中,即使在规范中没有明显显示那些值。
multi-spec-impl
不要直接调用此项,请使用“multi-spec”

n

nilable
返回一个规范,它接受 nil 和满足 pred 的值
nilable-impl
不要直接调用此项,请使用“nilable”
nonconforming
取一个规范并返回一个规范,它具有相同的属性,除了“符合”功能返回原始值(而不是符合的值)。注意,将会对正则表达式操作进行精细化。

o

or
获取关键+特征对,例如 (s/or :even even? :small #(< % 42)) 返回一个解构规范,其中包含一个映射条目,该条目包含第一个匹配特征的密钥和相应的值。因此,可以使用“键”和“值”功能来通用地引用有标记的回传组件。
or-spec-impl
不要直接调用此函数,请使用“or”

r

regex-spec-impl
不要直接调用此函数,请使用带正则表达式操作参数的“规范”
regex?
如果 x 是 (clojure.spec) 正则表达式操作,则返回 x;否则返回逻辑 false
registry
返回注册表映射,优先使用“get-spec”按名称查找规范
rep+impl
不要直接调用此函数,请使用“+”
rep-impl
不要直接调用此函数,请使用“*”

s

Spec
没有文档说明
spec
获取一个单独的谓语形式,例如可以是谓语的名称(如 even?),也可以是类似 #(< % 42) 的 fn 文字。请注意,在使用其他规范宏时,通常不需要将谓语包装在规范中,只需要附加一个惟一的生成器。还可以传递正则表达式操作(cat、alt、*、+、?)的结果,在这种情况下,它将返回一个符合正则表达式的规范,在嵌套一个独立的正则表达式时很有用。--- 可选获取 :gen 生成器 fn,它必须是一个没有参数且可以返回一个 test.check 生成器的 fn。返回一个规范。
spec-impl
不要直接调用此函数,请使用“规范”
spec?
如果 x 是规范对象,则返回 x;否则返回逻辑 false
Specize
没有文档说明
specize*
没有文档说明

t

tuple
获取一个或多个特征并返回一个元组规范,一个向量,其中每个元素都符合相应的特征。每个元素将在路径中使用其序号进行引用。
tuple-impl
不要直接调用此函数,请使用“tuple”

u

unform
给定一个规范和一个值(通过调用“符合”使用相同规范创建或符合规范),返回一个值,其中所有的符合解构都已撤销。
unform*
没有文档说明

v

valid?
当 x 对于规范有效时返回 true 的帮助器函数。

w

with-gen
获取一个规范和一个无参数且可以返回生成器的 fn,并返回使用该生成器的规范版本
with-gen*
没有文档说明