我正在使用这些参数执行drools规则。
session.execute(Arrays.asList(new Object[]{fileName,tableName}));
其中 fileName 和 tableName = 字符串
但是当我运行一些规则时:
rule"A"
when
$fileName: String()
$tableName: String()
then
System.out.println($fileName + " " + $tableName);
end
我在 BOTH 参数中有 fileName 。
fileName = fileName
tableName = fileName
如何在规则中声明正确的参数值?
答案 0 :(得分:3)
执行调用后,你的工作记忆中有两个事实:
String "filename"
String "tablename"
规则将模式“String()”与这两个字符串中的任何一个匹配:
$fileName: String() ... matches String "filename" and String "tablename"
$tableName: String() ... matches String "filename" and String "tablename"
因此规则将触发四次,为您提供所有组合。 - 插入普通的数据类型(如String或Map或List)通常是不好的做法。它们不容易识别。声明(String是final)类Filename和Tablename为{String value; ...},插入这些类的对象并将规则写为
Filename( $fn: value )
Tablename( $tn: value )
答案 1 :(得分:0)
另一种方式(在评论中收回此提案)。 我们可以使用全局。
在会话中设置全局变量
session.setGlobal( “文件名”,文件名)
session.setGlobal(“tableName”,tableName)
不要忘记设置.drl文件
global java.lang.String fileName
global java.lang.String tableName