如何在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
相关产品推荐
相关产品推荐

