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

如何在Malli中验证BigDecimal值?附number?用法示例

在Malli中验证BigDecimal类型变量及number?的使用说明

自定义BigDecimal验证规则

Malli确实没有内置的BigDecimal专属schema,你可以通过两种方式实现验证:

方式1:直接使用:pred谓词

通过instance?检查值是否为java.math.BigDecimal实例:

(require '[malli.core :as m])

;; 验证合法的BigDecimal
(m/validate [:pred #(instance? java.math.BigDecimal %)] (java.math.BigDecimal. "123.45"))
;; 返回 true

;; 验证非BigDecimal值(比如普通整数)
(m/validate [:pred #(instance? java.math.BigDecimal %)] 123)
;; 返回 false

方式2:注册可复用的自定义Schema

如果需要在多个地方使用BigDecimal验证,可以把它注册到Malli的注册表中:

(require '[malli.core :as m])
(require '[malli.registry :as mr])

;; 注册自定义BigDecimal schema
(mr/register! ::bigdecimal [:pred #(instance? java.math.BigDecimal %)])

;; 复用已注册的schema
(m/validate ::bigdecimal (java.math.BigDecimal. "678.90"))
;; 返回 true

Malli中number?的适用场景与示例

Malli的number?对应Clojure原生的number?函数,用于验证值是否属于Clojure定义的数值类型,包括整数、浮点数、BigInteger,但不包含BigDecimal(因为Clojure的number?对BigDecimal实例返回false)。

示例代码

;; 整数验证通过
(m/validate number? 42)
;; => true

;; 浮点数验证通过
(m/validate number? 3.14)
;; => true

;; BigInteger验证通过
(m/validate number? (java.math.BigInteger. "999"))
;; => true

;; BigDecimal验证失败(不属于Clojure number?范畴)
(m/validate number? (java.math.BigDecimal. "123.45"))
;; => false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:36:15