Malli中:与?用于数据类型校验的差异及float校验疑问
Malli中
:类型与类型?校验的区别及示例解析 核心区别
- 冒号前缀的关键字(如
:int、:string):是Malli预定义的内置Schema,属于Malli自身的标准校验规则集合,只能使用Malli官方定义好的关键字。 - 问号结尾的函数(如
int?、float?):是Clojure原生的谓词函数,Malli支持直接将这类单参数布尔函数作为Schema使用,只要函数能接收待校验值并返回布尔结果即可。
为什么:float校验失败,:int、:string却正常?
Malli的内置关键字Schema中没有:float这个预定义项,但提供了:double来匹配浮点数类型。而:int、:string是Malli明确支持的内置Schema,所以可以正常使用。如果要校验浮点数,除了用Clojure原生的float?,也可以用Malli的:double:
(m/validate :double 788.89) => true
示例运行逻辑解析
逐个拆解给出的代码示例:
(m/validate :int 788)→true:int是Malli内置整数Schema,788属于整数类型,校验通过。(m/validate int? 788)→trueint?是Clojure原生谓词,判断788是否为整数,结果为真,校验通过。(m/validate string? "89")→truestring?判断输入值"89"是字符串类型,返回真,校验通过。(m/validate :string "89")→true:string是Malli内置字符串Schema,"89"符合字符串类型,校验通过。(m/validate string? 89)→false
89是整数类型,string?判断结果为假,校验失败。
内容的提问来源于stack exchange,提问作者Blaze
相关产品推荐
相关产品推荐

