global Integer rank1;
global Integer rank2;
rule "Data"
salience 10
when
req : Requests(status == "ON")
then
drools.getWorkingMemory().setGlobal("rank1", 8);
drools.getWorkingMemory().setGlobal("rank2", 6);
end
rule "1" extends "Data"
salience 8
when
req1 : Requests()
then
System.out.print("1");
end
rule "2" extends "Data"
salience 6
when
req2 : Requests()
then
System.out.print("2");
end
这里,rank1和rank2在java代码中初始化为0。 输出为11112222。 我想要相同的输出但不是使用静态显着性,我希望它是动态的。
rule "1" extends "Data"
salience rank1
.......
但代码输出为21212121。
答案 0 :(得分:0)
您需要在插入事实之前设置全局变量。 Globals不会动态评估。
如果你真的需要更强大的显着性,你应该创建一个类
class Salience {
private int rank1;
private int rank2;
// ...
}
并插入具有适当值的事实,并根据需要进行更改。然后,您需要添加到根规则中的模式:
rule "Data"
when
Salience( $rank1: rank1, $rank2: rank2 )
Requests(...)
then
您可以在显着属性中使用$rank1
和$rank2
。
注意:几乎可以肯定,你的问题有一个解决方案,可以用逻辑表达而且没有显着性,这种用法几乎总是一个设计缺陷。