Drools:如何声明和分配全局

时间:2016-07-27 11:08:04

标签: drools

我想在drools规则文件(mvel)中声明一个全局变量。这是因为这个全局在所有规则中用作另一个函数的参数。我可以在每次调用函数时显式地传递这个字符串,但这会使字符串发生变化时很难。

我以为我能做到:

global String someStr = "some string";

但是在编译时,我得到了:

[11,31]: [ERR 107] Line 11:31 mismatched input '=' expecting one of the following tokens: '[package, import, global, declare, function, rule, query]'.

很明显,我不能这样分配它。我似乎也无法在该类中声明类和字符串以通过类引用。

所以我发现我可以做一些看似愚蠢的事情:

global String someStr;
rule "Initialize"
when
then
   someStr = "some string";
end

这似乎有效,但是,这将记录此规则每次匹配(总是)只分配一个全局。

有没有更好的方法让我失踪?

2 个答案:

答案 0 :(得分:0)

使用全局变量是一个两步过程。声明和分配。

声明在规则文件中进行。

分配在Java代码中的会话级别进行。

在Java代码中:

    List<String> list= new ArrayList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    KieSession ks = kcontainer.newKieSession("test");
    ks.setGlobal("glist", list);

在drl文件中:

global java.util.List glist;

现在,可以在drl文件中的所有规则中使用具有值“ a”,“ b”,“ c”的glist全局变量。

答案 1 :(得分:0)

你也可以在 DRL 中定义一个函数

#version 330 core

out vec4 color;

void main()
{
    color = vec4(1.0f);
}