首页 > 解决方案 > 流口水中的算术运算符

问题描述

我正在尝试用 Drools 语言实现规则。我需要将两个变量的两个整数值相加。我尝试了一些不同的方法,但它们似乎都不起作用。由于“+”符号或“eval”功能,我得到了失败。我需要进行求和,然后将其值与另一个值进行比较以触发规则。这些是我已经尝试过的组合

     $generationGrain : ($smallerGenerationIndex.intValue() + App.GENERATION_TIME.intValue() ) 
    
     $generationGrain : $smallerGenerationIndex.intValue() + App.GENERATION_TIME.intValue()
 
     $generationGrain : eval($smallerGenerationIndex.intValue() + App.GENERATION_TIME.intValue())
     
     $generationGrain : eval($smallerGenerationIndex + App.GENERATION_TIME)
    
     $generationGrain : ($smallerGenerationIndex + App.GENERATION_TIME )  
    
     $generationGrain : ($smallerGenerationIndex.intValue() + App.GENERATION_TIME.intValue() ) 

是不可能做到这一点还是我错过了什么?我是否应该只创建一个规则,在之后的总和then,然后是另一个规则,条件和另一个值?

标签: constraintsdroolsarithmetic-expressions

解决方案


Integer 有一个静态求和运算,您可以在这种情况下使用。

$generationGrain: Integer() from Integer.sum( $smallerGenerationIndex, App.GENERATION_TIME )

这也可以让你应用约束。例如,如果您想编写一个规则,使其仅在总和为负时触发,您可以这样做:

$generationGrain: Integer(this < 0) from ...

或者,如果您想对对象列表中的值求和,您可以使用accumulate带有sum函数的 an。但是对于两个离散的数字,我会这样做。

(其他数字包装器类型也具有类似的功能,例如 Double。)


推荐阅读