奇怪的drools语法

fas*_*ava 1 drools

我很难理解这个部分value : value == 0?这段代码是如何工作的?

rule "My rule"
   when
       m : MyClass( value : value == 0)
    then
end
Run Code Online (Sandbox Code Playgroud)

Eds*_*lli 5

假设您正在使用Drools 5.4或更新的快照,您可以将任何布尔表达式编写为约束,因此value == 0约束条件中"value"是MyClass中的字段名称.

Drools还允许您使用":"将属性绑定到变量名称,如下所示:

<variable_name> : <fieldName>
Run Code Online (Sandbox Code Playgroud)

所以,你可以写:

MyClass( $var : value == 0)
Run Code Online (Sandbox Code Playgroud)

最后,由于Drools使用"上下文感知"解析器,您可以拥有一个与属性名称相同的变量,因为Drools知道之前的内容:是变量名,而不是字段.因此,在您的示例中:如果value属性等于0,则变量"value"将绑定到属性"value",约束"value == 0"将为true.

希望能帮助到你.