You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

示例运行逻辑解析

逐个拆解给出的代码示例:

  1. (m/validate :int 788) → true
    :int是Malli内置整数Schema,788属于整数类型,校验通过。
  2. (m/validate int? 788) → true
    int?是Clojure原生谓词,判断788是否为整数,结果为真,校验通过。
  3. (m/validate string? "89") → true
    string?判断输入值"89"是字符串类型,返回真,校验通过。
  4. (m/validate :string "89") → true
    :string是Malli内置字符串Schema,"89"符合字符串类型,校验通过。
  5. (m/validate string? 89) → false
    89是整数类型,string?判断结果为假,校验失败。

内容的提问来源于stack exchange,提问作者Blaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:48:20