0

我有一个类似于以下的规则。我需要将匹配器返回的值分配给要在其他地方使用的处理程序。我怎样才能做到这一点?谢谢你。

package a.b.c 

import java.util.List; 

import a.b.Matcher; 
import a.b.Container; 
import a.b.TestObject1; 
import a.b.TestObject2; 

global Matcher myMatcher; 
global Container container; 

when 
        $x1: TestObject1( 
                $x1_1 : id, (id in ("11", "16", "140")) 
        ) 

        $x2: TestObject2( 
                $x2_2: id, myMatcher.match(id, container.getContainer(100)) != null
         ) 

then 
        //print. 
end 
4

1 回答 1

0

AFAIK 没有直接的方法可以做到这一点。2个选项是:

  1. 在规则的 RHS 中再次调用 myMatcher.match()。如果 match() 方法的执行成本很高,这可能会出现问题。
  2. 创建一个不同的规则来计算所有 TestObject2 事实的 match() 值:

    rule 'Calculate match value'
        $t: TestObject2()
    when
        TestObject2Match m = new TestObject2Match($t); // -> you must define this class
        m.setMatchValue(myMatcher.match($t.getId(), container.getContainer(100)));
    
        insertLogical(m);
    then
    

现在,您之前的规则必须重写如下:

    rule '...'
        $x1: TestObject1( 
            $x1_1 : id, (id in ("11", "16", "140")) 
        ) 
        $m: TestObject2Match(matchValue != null)
    when
        //print $m.getMatchValue()
    then

希望能帮助到你,

于 2013-01-31T10:10:45.347 回答