繁体   English   中英

Drools:如何在非表达式中实现 and ( && ) 条件?

[英]Drools: how to implement and ( && ) condition inside not expression?

我有以下规则:

rule " data value > 50 for 10 seconds "
dialect "java"
when
    data: MyData(name.contains("double") && getValue()> 50) from entry-point "dataEntryPoint"   
    not(
        myData(this.name==dataName,
        getValue() < 50 ,
        this after[0,10s] data ) from entry-point "dataEntryPoint" )
    
then
    doSmthg();
end

数据类型包含在名称中,我只想在双精度值上编写此规则。 但是,似乎在第二个表达式(在 not 内部)中,即使 this.name != dataName 也会调用getValue() ,这会导致错误,因为该值是一个字符串。

基本上,如果第一个条件为真( && ),我希望它只评估 getValue() 。

我只有在添加 not() 条件时才会遇到这个问题。

当我删除它时, getValue() > 50 仅在第一个条件为真时评估。

rule " data value > 50 for 10 seconds "
dialect "java"
when
    data: MyData(name.contains("double") && getValue()> 50) from entry-point "dataEntryPoint"   
    
then
    doSmthg();
end

有趣的是,它仅在&&运算符的两个部分都是同一变量的约束时才起作用。

rule "data value > 50 for 10 seconds"
dialect "java"
when
    data: MyData(name contains "double" && value > 50) from entry-point "dataEntryPoint"   
    not(
        MyData(name == data.name, 
        value instanceof Number && value < 50,
        this after[0,10s] data) from entry-point "dataEntryPoint")
then
    System.out.println("alert");
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM