java - Drools:同一案例的规则触发两次
问题描述
尽管只有一个匹配案例,但此规则会触发两次。我使用 Drools 6.5.0。最终的。查看日志,在第二轮中将 $card2 作为 $card1,反之亦然。
rule "Rule1"
salience 1
when
$card1 : (used == false)
$card2 : (used == false, number = $card1.number)
exists Hand(name == name1)
exists Hand(name == name2 || name == name3)
not Hand(name == name4)
then
$card1.setUsed(true); $card2.setUsed(true);
insert(new Hand(name1, $card1, $card2));
end
解决方案
规则的 No-Loop 属性确保在 then 语句中发生 when 条件中使用的相同对象的更新/修改时不会重新触发相同的规则。
定义无循环的方法如下:
rule "Rule1"
no-loop true
推荐阅读
- reactjs - 反应选择没有选择选项
- python - 熊猫:选择最后“N”列
- react-native - 无法解析模块`@expo/vector-icons/FontAwesome`
- python - Python Argparse:可选参数中的参数
- flutter - Flutter 的 PopupMenuButton 中未显示图标
- javascript - 在 HTML 上显示多个 JSON 响应作为单个值
- c# - 从另一个 ViewModel 更新组合框项
- python - 如何让 PyCharm 在实例属性的文档中显示任意文本?
- wordpress - 让 wordpress 在 wamp localhost 和实时服务器上使用相同的 wp-config.php
- reactjs - React 库(不同版本)加载到网页上