它还没有得到很好的记录,但是单继承确实存在于drools中。它允许您创建扩展另一个规则的规则。当且仅当超级规则和子规则的条件都为真时,子规则才会触发。(见底部我的笔记)。
在下面的示例中,“Flags”是一个带有 2 个布尔值的简单 Java 类:isSuperTrue 和 isSubTrue。神奇的短语将“super”扩展为“sub”规则定义的一部分。规则的名称(sub 和 super)是说明性的,可以更改为任何合法的规则名称。
rule "super"
@description("Fires when isSuperTrue is true regardless of the state of isSubTrue")
when
$flag : Flags(isSuperTrue == true)
then
System.out.println("super rule should fire anytime super is true and ignore sub");
end
rule "sub" extends "super"
@description("Fires only when both isSubTrue and isSuperTrue are true")
when
Flags(isSubTrue == true)
then
System.out.println("sub rule should fire when both isSubTrue and isSuperTrue are true");
end
注 1:5.5.0.Final 中存在一个问题,要求在规则定义文件中将超级规则放在子规则之前。我已确认该错误已针对 5.6.0.CR1 进行了修复。
注意 2:此功能间接记录在5.5.0.Final的发行说明中,在第 4.1.1.3 节中。核心主题是“条件命名后果”,但它利用了规则继承。