まだ十分に文書化されていませんが、単一の継承は drools に存在します。別のルールを拡張するルールを作成できます。サブ ルールは、スーパー ルールとサブ ルールの両方の条件が true の場合にのみ実行されます。(一番下の私のメモを参照してください)。
以下の例では、"Flags" は 2 つのブール値 (isSuperTrue と isSubTrue) を持つ単純な Java クラスです。マジック フレーズは、「サブ」ルール定義の一部として「スーパー」を拡張します。ルールの名前 (サブおよびスーパー) は説明用であり、任意の有効なルール名に変更できます。
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: この機能は、セクション 4.1.1.3 の 5.5.0.Finalのリリース ノートに間接的に記載されています。中心的なトピックは「条件付きの名前付き結果」ですが、ルールの継承を活用しています。