在Drools中考虑以下场景:
我们有一条规则,将A
和B
类型的对象相互匹配。
rule 1
when
$a : A()
$b : B($a.matches($b), flagged == false)
then
mofidy($b) { flag($a) }
end
但是,A
个对象有一个名为priority
的字段,当B
到达工作内存时,具有最高优先级的匹配A
应该标记它,高于所有其他匹配的A
。
这怎么可能在Drools?它如何影响性能?
答案 0 :(得分:1)
假设B.flag()
将其flagged
属性设置为true,您可以尝试这样的事情:
rule 1
when
$a : A()
not A(this != $a, priority > $a.priority)
$b : B($a.matches($b), flagged == false)
then
mofidy($b) { flag($a) }
end
在这个例子中要注意的一点是,如果插入了一个具有高优先级的A对象,那么任何已经标记为较低A的B都不会被重新标记。
如果你需要重新翻译你的Bs,那么你可以尝试这样的事情:
rule 1
when
$a : A()
not A(this != $a, priority > $a.priority)
$b : B($a.matches($b), flag != $a)
then
mofidy($b) { flag($a) }
end
希望它有所帮助,