当前位置: 首页 > 知识库问答 >
问题:

来自drools规则的意外输出

慎星纬
2023-03-14
rule "Is of valid age" salience 10
    when
        $a: Applicant (getAge() > 18)
    then
        $a.setValid(true);
        System.out.println($a.getName() + " is eligible for driving license!");
end

rule "Can by alcohol" salience 1
    when
        $a: Applicant(isValid() == false);
    then
        System.out.println($a.getName() + " cannot buy alcohol!");
end
Applicant applicant1 = new Applicant("Berat", 20, 2010);
kieSession.insert(applicant1);
kieSession.fireAllRules();
System.out.println(applicant1.getName() + " is of valid age: " + applicant1.isValid());

Berat有资格获得驾驶执照!
Berat不能买酒!
Berat的有效年龄:真

虽然,我优先考虑每个规则与突出关键字,“可以由酒精”规则仍然被解雇。它不应该被激发,因为在第一个规则中执行setValid(true),而在第二个规则中执行isValid()==false控件应该返回false,因此应该遗漏部分。

共有1个答案

潘泳
2023-03-14

声明

 $a.setValid(true);

将申请者的valid设置为true,但不会传播到Drools规则引擎。你需要

 modify( $a ){ setValid( true ) }

以查看其他较低突出度规则的正确设置。

 类似资料:
  • 问题内容: 我只是通过跟随有关Udemy的教学视频开始学习Go的,我尝试按如下方式打印当前时间 我得到一个很长的文本作为输出如下 我原本希望只在其后加上a ,这应该是结尾。预期的输出如下所示,也如本教程视频中所示。但是对我来说,结果的形式要长得多。 问题是,为什么同一个命令在教师的程序和我的程序之间返回不同的格式?为什么没有设置特定的格式,不应该返回一种格式? 问题答案: 问题是,为什么同一条命令

  • 我正在使用drools fusion,我想根据实现的规则数测试这个cep系统的性能。现在,我有了一个简单的规则文件。drl扩展。我想动态生成大约1000条规则。那么,如何在不让他们在中创建一对一的情况下自动完成此操作呢。drl文件?

  • 我的问题是: 在Drools规则中,有没有一种方法可以拦截“成功”事件?为了更好地解释。。。有一种方法可以在规则的所有条件都为真时调用侦听器? 注意:我不想设置一个全局对象(在会话上)来管理规则的“然后”子句中的这个条件。 我正在寻找一个已经在Drools上实现的解决方案 规则示例

  • null 我在上面试图指出的是,只有在执行第一个规则时,第二个规则才会执行。但是,正如我所理解的,规则的“如果”部分是在“然后”部分之前执行的,因此,第二条规则失败了。

  • 我正在向drools规则引擎插入数据,但我无法理解它是如何处理插入的数据的。插入数据的代码是: