上QQ阅读APP看书,第一时间看更新
3.4 运算符
运算符是在程序中最常用的计算方法,一般的运算符包括“+”“-”“*”“/”“%”等,优先级与Java相同。下面通过“/”运算举例说明。
编辑hello.drl,添加test006规则,其内容为:
rule "test006" when $p:Person(age/2==20); then System.out.println("规则test006规则执行成功"+$p); end
执行调用规则代码,运行结果如图3-1所示。
图3-1 操作除号取除结果
% 取模的操作是常用的运算方法,编辑hello.drl,添加test007规则,其内容为:
rule "test007" when $p:Person(age%2==0); then System.out.println("规则test007规则执行成功"+$p); end
执行调用规则代码,运行结果如图3-2所示。
图3-2 取模操作异常结果
为了验证测用例的语法是否正确,查阅官方文档后,找到取模运算符的操作,证明是可以使用的,如图3-3所示。
图3-3 官方取模说明
如图3-4所示,通过参考官方提供的取模测试用例进行运算时,需要先进行取模运算的比较。然而规则test007只有一个匹配模式,属性约束条件也只有一个,我对需要添加括号产生了疑问。
图3-4 官方取模用例
为了验证官方文档上提到的使用括号方式是否正确,编辑规则添加的属性约束条件,添加“,age>10”。再次执行调用规则代码,结果与图3-4所示的效果一样。虽然测试失败了,但根据官方文档提供括号“()”的作用来看,应该可以解决以下问题。
编辑test007规则,其内容为:
rule "test007"
when
$p:Person((age%2)==0);
then
System.out.println("规则test007规则执行成功"+$p);
end
再次执行调用规则代码,结果如图3-5所示,也就是说,在%取模运算上,规则需要控制优先级,即先运算后匹配。
图3-5 通过括号取模结果