gpt4 book ai didi

java - 如何在不使用 NO-LOOP 属性的情况下避免 Drools 中的循环?

转载 作者:行者123 更新时间:2023-11-30 03:35:20 25 4
gpt4 key购买 nike

是否有任何可能的方法可以在不使用 Drools 的 NO-LOOP 属性的情况下避免循环(就像我听说我们可以通过在对象上使用 not(!) 运算符来实现这一点,但我无法找到答案。)

问题是不能使用 NO-LOOP 属性(因为这是要求),因此请参阅下面的规则并告诉是否可以避免循环。

TestClass.java

public class TestClass{
private String name;
private int age;

// Few other variables
// their getters and setters

}

规则

rule "abc"
when
$obj : TestClass(name=="test", age != 20)
then
TestClass $obj2 = new TestClass();
$obj2.setName("test");
$obj2.setAge(30);
insert($obj2);
end

最佳答案

不知道为什么有些人如此害怕无循环。它的存在是有充分理由的。即,如果重新评估的原因是由于该规则的修改或插入,则它指示引擎不要重新评估该规则。

但是,您可以通过自己的逻辑手动执行此操作。只需插入适当的事实并匹配不存在的事实即可。

declare IsTested
name: String
end

rule "abc"
when
$obj : TestClass($name: name=="test", age != 20)
not IsTested(name == $name)
then
TestClass $obj2 = new TestClass();
$obj2.setName("test");
$obj2.setAge(30);
insert($obj2);
insert(new IsTested($name));
end

不久前,Esteban Aliverti 在 common patterns for avoiding infinite loops in Drools 上写了一篇博文。值得一读。

关于java - 如何在不使用 NO-LOOP 属性的情况下避免 Drools 中的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com