当前位置: 首页 > article >正文

实践出真知:MVEL表达式empty的坑

目录标题

  • 背景
  • 为什么呢?
    • 验证下empty的含义
      • case1
      • case2
      • case3
    • 结论
      • 具体解释:

背景

//是否白名单
if(goodInfo.?isWhite != empty){
  showList.add(["label": "是否白名单","value":["text":(goodInfo.?isWhite == true ? "是" : "否")] ,"maxLine": 1,"type": 1,"config": ["canCopy":true]]);
}

需要展示一个是否白名单的字段
如果true展示“是”,否则展示“否”
但是实际上false的时候这个字段不展示
表面原因是没有加入到showList里面去

为什么呢?

需要分析一下empty的含义

官网:http://mvel.documentnode.com/

在这里插入图片描述

MVEL为测试值的空性提供了一个特殊的文字,巧妙地命名为empty。例如:foo == empty如果foo的值满足空性的任何要求,则示例表达式将为true。

验证下empty的含义

执行脚本如下

System.out.println("goodInfo.?isWhite==empty 结果:" + (goodInfo.?isWhite == empty));
System.out.println("goodInfo.?isWhite!=empty 结果:" + (goodInfo.?isWhite != empty));
System.out.println("goodInfo.?isWhite==null 结果:" + (goodInfo.?isWhite == null));
System.out.println("goodInfo.?isWhite!=null 结果:" + (goodInfo.?isWhite != null));

case1

入参:

{
  "goodInfo": {
    "isWhite": true
  }
}

执行结果:

goodInfo.?isWhite==empty 结果:false
goodInfo.?isWhite!=empty 结果:true
goodInfo.?isWhite==null 结果:false
goodInfo.?isWhite!=null 结果:true

case2

入参:

{
  "goodInfo": {
    "isWhite": false
  }
}

执行结果:

goodInfo.?isWhite赋值false情况
goodInfo.?isWhite==empty 结果:true
goodInfo.?isWhite!=empty 结果:false
goodInfo.?isWhite==null 结果:false
goodInfo.?isWhite!=null 结果:true

case3

入参:


{
  "goodInfo": {}
}

执行结果:

goodInfo.?isWhite==empty 结果:true
goodInfo.?isWhite!=empty 结果:false
goodInfo.?isWhite==null 结果:true
goodInfo.?isWhite!=null 结果:false

结论

  • empty 表示一个空值或未定义的值。
  • goodInfo.isWhitefalse 或未定义时,goodInfo.?isWhite == emptytrue
  • goodInfo.isWhitetrue 时,goodInfo.?isWhite == emptyfalse

具体解释:

  • goodInfo.?isWhite == empty
    • goodInfo.isWhitefalse 或未定义时,结果为 true
    • goodInfo.isWhitetrue 时,结果为 false
  • goodInfo.?isWhite != empty
    • goodInfo.isWhitefalse 或未定义时,结果为 false
    • goodInfo.isWhitetrue 时,结果为 true
  • goodInfo.?isWhite == null
    • goodInfo.isWhite 未定义时,结果为 true
    • goodInfo.isWhitetruefalse 时,结果为 false
  • goodInfo.?isWhite != null
    • goodInfo.isWhite 未定义时,结果为 false
    • goodInfo.isWhitetruefalse 时,结果为 true

在这里插入图片描述


http://www.kler.cn/a/384137.html

相关文章:

  • 在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码
  • 搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用
  • [复健计划][紫书]Chapter 7 暴力求解法
  • Maven(20) 如何使用Maven进行版本管理?
  • 大模型微调技术 --> LoRA 系列之 QLoRA (省资源能手)
  • Python 学习完基础语法知识后,如何进一步提高?
  • vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装
  • 【Python爬虫实战】DrissionPage 与 ChromiumPage:高效网页自动化与数据抓取的双利器
  • 【AI】【提高认知】卷积神经网络:从LeNet到AI淘金热的深度学习之旅
  • 一、数据操作
  • 5G NR物理层|5G PHY层概述
  • 【SpringCloud】Nacos微服务注册中心
  • 【LeetCode】【算法】416. 分割等和子集
  • STM32F1 LL 库和HAL 库在GPIO 上的区别
  • 从0开始学习机器学习--Day13--神经网络如何处理复杂非线性函数
  • 【JavaEE】常见锁策略、CAS
  • python --03 (数据类型)
  • 【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第2章、《模式一:问候模式》
  • Qt——窗口
  • 阿里云 DataWorks 正式支持 SelectDB Apache Doris 数据源,实现 MySQL 整库实时同步
  • Golang | Leetcode Golang题解之第542题01矩阵
  • Spring Boot 与 Vue 共筑航空机票预定卓越平台
  • Docker LLama-Factory vLLM 快速部署Meta-Llama-3.1-70B-Instruct
  • 银行卡二要素核验 API 对接说明
  • uniapp 实现瀑布流
  • LSTM+LightGBM+Catboost的stacking融合模型