gpt4 book ai didi

Drools:如何声明和分配全局

转载 作者:行者123 更新时间:2023-12-02 08:28:33 25 4
gpt4 key购买 nike

我想在 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

这似乎可行,但是,每次此规则匹配(总是)时都会记录以分配全局。

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

最佳答案

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

声明发生在规则文件中。

分配发生在 java 代码的 session 级别。

在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;

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

关于Drools:如何声明和分配全局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38611246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com