我是drools的新手,熟悉使用extends关键字继承规则.问题是有继承多个规则的方法吗?这类似于在 java类上使用多个接口.以下是我希望它如何工作的示例,但我在规则3中收到错误: rule "rul
rule "rule 1" when //person name == "John" then //print "John" end rule "rule 2" when //person last name == "Smith" then //print "Smith" end rule "rule 3" extends "rule 1", "rule 2" when //person age > 20 then //print John Smith is older than 20 end
谢谢黎明
它还没有很好的文档记录,但在drools中确实存在单一继承.它允许您创建扩展另一个规则的规则.当且仅当超级规则和子规则的两个条件都为真时,子规则才会触发. (见底部的笔记).在下面的示例中,“Flags”是一个带有2个布尔值的简单Java类:isSuperTrue和isSubTrue.神奇的短语是“超级”扩展,作为“子”规则定义的一部分.规则的名称(子和超级)是说明性的,可以更改为任何合法的规则名称.
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中有一个issue,要求将超级规则放在规则定义文件中的子规则之前.我已经确认该错误已针对5.6.0.CR1修复.
注2:该功能间接记录在4.1001 for 5.5.0.Final 4.1.1.3节中.核心主题是“条件命名后果”,但它利用了规则继承.