首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drools:如何在非表达式中实现和(&)条件?

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

Stack Overflow用户
提问于 2020-09-29 11:04:39
回答 1查看 295关注 0票数 0

我有以下规则:

代码语言:javascript
复制
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中)中,getValue()似乎正在被调用,即使this.name != dataName会导致错误,因为该值是字符串。

基本上,我希望它只在第一个条件为真( && )时计算getValue()。

只有在添加not()条件时才会出现此问题。

当我删除它时,只有当第一个条件为真时,getValue() > 50才会被计算。

代码语言:javascript
复制
rule " data value > 50 for 10 seconds "
dialect "java"
when
    data: MyData(name.contains("double") && getValue()> 50) from entry-point "dataEntryPoint"   
    
then
    doSmthg();
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-02 21:40:23

有趣的是,只有当&&操作符的两个部分都是相同变量的约束时,它才能工作。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64118306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档