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

私の知る限り、それを行う簡単な方法はありません。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 に答える