Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 将方法返回的值赋给句柄。_Drools - Fatal编程技术网

Drools 将方法返回的值赋给句柄。

Drools 将方法返回的值赋给句柄。,drools,Drools,我有一个类似于下面的规则。我需要将匹配器返回的值分配给处理程序,以便在其他地方使用。我该怎么做?多谢各位 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

我有一个类似于下面的规则。我需要将匹配器返回的值分配给处理程序,以便在其他地方使用。我该怎么做?多谢各位

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 

恐怕没有直接的方法可以做到这一点。 两个选择是:

  • 在规则的RHS中再次调用myMatcher.match()。如果match()方法的执行代价很高,那么这可能会有问题
  • 为所有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
    
    希望有帮助