QLExpress支持的操作符

首先我通过看GitHub上面阿里团队提供的源码,找到如下可以实现并支持的操作符,通过手撕源码我发现还可以自定义操作符,下面我分两部分进行介绍我这几天学习QLExpress支持的操作符,内容不可能很详细,仅供大家参考哈。

QLExpress之操作符工厂

首先,我先介绍一下官网上面提供的操作符,代码如下:

public OperatorFactory(boolean isPrecise) {this.isPrecise = isPrecise;addOperator("new", new OperatorNew("new"));addOperator("anonymousNewArray", new OperatorAnonymousNewArray("anonymousNewArray"));//匿名数组addOperator("NewList", new OperatorAnonymousNewList("NewList"));//新的列表addOperator(":", new OperatorKeyValue(":"));addOperator("NewMap", new OperatorAnonymousNewMap("NewMap"));//新的集合addOperator("def", new OperatorDef("def"));//定义函数addOperator("exportDef", new OperatorExportDef("exportDef"));addOperator("!", new OperatorNot("!"));addOperator("*", new OperatorMultiplyDivide("*"));addOperator("/", new OperatorMultiplyDivide("/"));addOperator("%", new OperatorMultiplyDivide("%"));addOperator("mod", new OperatorMultiplyDivide("mod"));//求余数addOperator("+", new OperatorAdd("+"));addOperator("-", new OperatorReduce("-"));addOperator("<", new OperatorEqualsLessMore("<"));addOperator(">", new OperatorEqualsLessMore(">"));addOperator("<=", new OperatorEqualsLessMore("<="));addOperator(">=", new OperatorEqualsLessMore(">="));addOperator("==", new OperatorEqualsLessMore("=="));addOperator("!=", new OperatorEqualsLessMore("!="));addOperator("<>", new OperatorEqualsLessMore("<>"));addOperator("&&", new OperatorAnd("&&"));addOperator("||", new OperatorOr("||"));addOperator("nor", new OperatorNor("nor"));addOperator("=", new OperatorEvaluate("="));addOperator("exportAlias", new OperatorExportAlias("exportAlias"));addOperator("alias", new OperatorAlias("alias"));addOperator("break", new OperatorBreak("break"));addOperator("continue", new OperatorContinue("continue"));addOperator("return", new OperatorReturn("return"));addOperator("ARRAY_CALL", new OperatorArray("ARRAY_CALL"));addOperator("++", new OperatorDoubleAddReduce("++"));addOperator("--", new OperatorDoubleAddReduce("--"));addOperator("cast", new OperatorCast("cast"));addOperator("macro", new OperatorMacro("macro"));//宏定义addOperator("function", new OperatorFunction("function"));//方法addOperator("in", new OperatorIn("in"));addOperator("like", new OperatorLike("like"));// bit operatoraddOperator("&", new OperatorBit("&"));addOperator("|", new OperatorBit("|"));addOperator("^", new OperatorBit("^"));addOperator("~", new OperatorBit("~"));addOperator("<<", new OperatorBit("<<"));addOperator(">>", new OperatorBit(">>"));}

这里是官网添加的基本操作符,有些不经常用,对部分难理解的操作符,我已经加注释了,下面举几个例子供大家参考。
IN操作符:

public void test2() throws Exception{ExpressRunner runner=new ExpressRunner();DefaultContext<String,Object> context=new DefaultContext<>();context.put("mobilePrefix","166");String express="mobilePrefix in (162,165,167,170,171)";runner.addOperatorWithAlias("等于","==","号码不满足期望");List<String> errorInfo=new ArrayList<>();Object execute=runner.execute(express,context,errorInfo,false,false);System.out.println(execute);System.out.println(errorInfo.size()>0 ? errorInfo.get(0):null);}

由于166不在IN里面,返回false。

针对QLExpress操作符补充–仅代表个人理解

addN操作符:(实现操作数相加),举例代码如下:

public void testAddNByOperator() throws Exception {//定义表达式,相当于4+1+2+3String exp = "4 addN (1,2,3)";ExpressRunner runner = new ExpressRunner();//定义操作符addN,其实现为AddNOperator,语法格式与in一致runner.addOperator("addN", "in", new AddNOperator());int r = (Integer)runner.execute(exp, null, null, false, false);System.out.println(r);Assert.assertEquals("操作符执行错误", 10, r);}

addT操作符:(操作数双倍相加)举例代码如下:

public void testAddTwiceWithParams() throws Exception {//定义表达式,相当于 i+(j+j)+(n+n)String exp = " i addT j addT n";IExpressContext<String, Object> expressContext = new DefaultContext<>();expressContext.put("i", 1);expressContext.put("j", 22);expressContext.put("n", 2);ExpressRunner runner = new ExpressRunner();//定义操作符addT,其实现为AddTwiceOperatorrunner.addOperator("addT", new AddTwiceOperator());int r = (Integer)runner.execute(exp, expressContext, null, false, false);System.out.println(r);Assert.assertEquals("操作符执行错误", 49, r);}

目前先补充这几个例子,后期使用到还会添加操作符作为补充,也欢迎小伙伴投稿:1443497132@qq.com。

QLExpress支持的操作符相关推荐

  1. QLExpress规则引擎使用笔记

    目录 QLExpress支持哪些操作符? 手机号前缀规则 demo 地址规则 demo 地址+手机号前缀组合demo 自定义操作符 自定义的对象(例如Spring对象)方法转换为表达式 QLExpre ...

  2. 《C#本质论》读书笔记(14)支持标准查询操作符的集合接口

    14.2.集合初始化器 使用集合初始化器,程序员可以采用和数组相似的方式,在集合的实例化期间用一套初始的成员来构造这个集合.如果没有集合初始化器,就只有在集合实例化后才能显示添加到集合中--例如使用 ...

  3. C++中的逻辑操作符重载

    文章目录 1 C++中的逻辑操作符重载 1.1 逻辑操作符的原生语义 1.2 重载逻辑操作符 1.3 逻辑操作符重载的建议 1 C++中的逻辑操作符重载 1.1 逻辑操作符的原生语义 逻辑操作符的原生 ...

  4. Python基础概念_3_操作符与表达式

    操作符与表达式 4 操作符与表达式 我们知道程序其实是代码段的组合,就像我们写的作文是一个个的段落堆积起来的,每一个段落又由句子组成,句子又包含"主谓宾定状补".本章我们就来讲讲程 ...

  5. LINQ 的标准查询操作符

    摘自msdn (http://msdn.microsoft.com/zh-cn/magazine/cc337893.aspx) LINQ 的标准查询操作符 John Papa 代码下载位置: Data ...

  6. 集合的创建、集合的特性(成员操作符、for循环)

    一.集合的创建 代码块: #集合里面的元素是不可重复的 s = {1,2,3,1,2,3,4,5} print(type(s)) print(s)s1 = set([]) print(type(s1) ...

  7. 《C++ Primer》之重载操作符与转换(中)

    赋值操作符 类赋值操作符接受类类型形参,通常,该形参是对类类型的 const 引用,但也可以是类类型或对类类型的非 const 引用.如果没有定义这个操作符,则编译器将合成它.类赋值操作符必须是类的成 ...

  8. [c++primer][14]重载操作符与转换

    14.1 重载操作符的定义 不能重载的操作符:.  ?:  sizeof  ::  .* 不能为任何内置类型定义额外的新的操作符:优先级和结合性是固定的:不再具备短路求值特性(不建议重载&&a ...

  9. PostgreSQL SQL 语言:函数和操作符

    本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 1. 逻辑操作符 常用的逻辑操作符有: AND OR NOT SQL使用三值的逻辑系统,包括真.假和null,null表示 ...

最新文章

  1. MIB in SNMP
  2. MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset
  3. HTML的标签描述11
  4. 报名即将关闭丨AAAI 2020论文预讲会
  5. 如何设置采购收货直接转到供应商库存?
  6. 华为云数据库自研黑科技,助推企业成本再降 50%
  7. 【面试必备】javascript的原型和继承
  8. 闲来无事,拆个示波器玩玩。
  9. python format格式化输出填充符号不起作用_Python格式化输出——format用法示例
  10. Batch Normalization批量归一化
  11. 测试类什么时候初始化
  12. 易语言 — 数据类型
  13. New Concept English Two 5
  14. 防火墙中查看用户流量
  15. 杜比专为旧版本Android,杜比音效app(dolby audio) v2.1.0 安卓版
  16. 机器视觉入门知识体系整理(不全)
  17. 十次方:机架式服务器和塔式服务器有什么区别?
  18. 用Bluemix虚拟机搭建自己的博客系统
  19. 从虚拟偶像到“网红”VUP,变现狂欢下的浮士德交易
  20. 搜狗推送工具只搜狗快速收录方法点解

热门文章

  1. Salesforce 系列和Apex 系列的一个汇总篇!
  2. nexus工作目录设置
  3. 微信小程序开发之——时钟-Canvas介绍(1)
  4. 电脑上卸载软件的残留文件怎么清理?
  5. Python读取写入postgresql数据库
  6. C# Winform 使用GDI+ 绘制实时曲线图、面积曲线图
  7. Linux虚拟机设置固定IP地址
  8. 计算鼠标的按下、移动、抬起的位置 vue
  9. English Learning - L3 综合练习 3 VOA-Food 2023.05.17 周三
  10. shell和shell脚本的区别