出于某种原因,drools卡在一个循环中,总是使用相同的参数($ c和$ d)触发相同的规则。
rule removing_invalid_dungeons
when
$c : Cave()
$d : Dungeon(valid, x < $c.minCoordinateHorizontal || x > $c.maxCoordinateHorizontal || y<$c.minCoordinateVertical || y>$c.maxCoordinateVertical)
then
Agent.logger.info("Rule fired ["+drools.getRule().getName()+"] - {}",$d.toString());
modify($d) {setValid(false)};
modify($c){removeDungeon($d)};
retract($d);
end;
我放了一个断点,我可以看到它在第一次触发后,即使有效的== false也会继续射击!更糟糕的是,$ d已被收回。
如果我删除了修改($ c),它只能触发一次。
rule removing_invalid_dungeons
when
$c : Cave()
$d : Dungeon(valid, x < $c.minCoordinateHorizontal || x > $c.maxCoordinateHorizontal || y<$c.minCoordinateVertical || y>$c.maxCoordinateVertical)
then
Agent.logger.info("Rule fired ["+drools.getRule().getName()+"] - {}",$d.toString());
modify($d) {setValid(false)};
$c.removeDungeon($d);
retract($d);
end;
我已调试并且$ c.removeDungeon($ d)正常工作(它只是从列表中删除$ d)。
为什么呢?任何线索?