如何实现规则 如果我只想执行一条规则而不是执行 Drools 规则引擎中的所有规则?

unk*_*own 2 rule-engine drools rule

我想实现规则引擎,其中如果仅执行一个条件,则它不会检查其他指定的条件。

rule "Print out lower-case tokens"
when
    Token ( coveredText == coveredText.toLowerCase )
then
    System.out.println("Found a lower case token with text");
end


rule "Print out long tokens with more than 5 characters"
    when
        Token ( tokenText : coveredText, end - begin > 5 )
    then
        System.out.println("Found a long token with more than 5 characters \"" + tokenText + "\"");
end
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,如果 CoveredText 和它的小写字母相等,那么我不想检查另一个规则。
我怎样才能在 中实现这种性质Drools Rule Engine

kas*_*tti 5

如果您只有几条规则,@KC 提到的议程组对于您的目的来说可能太“繁重”。在更简单的情况下,我只需添加一个事实来标记规则不应再被触发,如下所示

declare AlreadyProcessed
end

rule "Print out lower-case tokens"
  when
    not AlreadyProcessed()
    Token ( coveredText == coveredText.toLowerCase )
  then
    System.out.println("Found a lower case token with text");
    insert( new AlreadyProcessed() );
end


rule "Print out long tokens with more than 5 characters"
    when
        not AlreadyProcessed()
        Token ( tokenText : coveredText, end - begin > 5 )
    then
        System.out.println("Found a long token with more than 5 characters \"" + tokenText + "\"");
        insert( new AlreadyProcessed() );
end
Run Code Online (Sandbox Code Playgroud)

如前所述,如果需要,您可以通过显着性来控制执行顺序。