我想在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
这似乎有效,但是,这将记录此规则每次匹配(总是)只分配一个全局。
有没有更好的方法让我失踪?
答案 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);
}