Drools 存在与“正常”模式

Fra*_*ank 5 drools

我有一个问题理解为什么exists关键字是必要的。我有以下规则:1)

rule "normal"
  when
    Bus( seats > 20 )
  then
    System.out.println("There is a 20+ bus);
end
Run Code Online (Sandbox Code Playgroud)

2)

rule "with exists"
  when
    exists Bus( seats > 20 )
  then
    System.out.println("There is a 20+ bus existing...);
end
Run Code Online (Sandbox Code Playgroud)

第一条规则的 LHS 与第二条规则有何不同?

谢谢!

kas*_*tti 9

文档exists状态如下

CE 存在是一阶逻辑的存在量词,用于检查工作内存中是否存在某些东西。将“存在”视为“至少有一个……”的意思。它不同于仅仅拥有自己的模式,这更像是在说“对于每个……”。如果您将exists 与模式一起使用,则该规则最多只会激活一次,无论工作内存中有多少数据与exists 模式内的条件匹配。由于只有存在才重要,因此不会建立任何绑定。

因此,对于您的示例,第一个规则是为每辆超过 20 个座位的巴士触发,但第二个规则仅触发一次,即使有超过 20 个座位的巴士。