gpt4 book ai didi

java - Drools DRL 中的对象传递问题

转载 作者:行者123 更新时间:2023-12-02 02:05:47 26 4
gpt4 key购买 nike

我在这里遇到一个问题,在我在第一条规则上将对象设置为“FAILED”后,但在运行第二条规则时,该值仍然指向原始值“PASS”。请注意该值是从 kie 客户端传递的。

    rule "1st rule"
dialect "java"
when
$ruleEngine:RuleEngine()
then
OutputObject outputObject = new OutputObject();
outputObject.setResult("FAIL" );
$ruleEngine.setOutputObject(outputObject);
insert ($ruleEngine);
end

rule "2nd rule"
dialect "java"
when
$ruleEngine:RuleEngine(
( String.valueOf($ruleEngine.getOutputObject.getResult()).equals("PASS") ) //=====> the value is still PASS
)

then
System.out.println("output object==" + $ruleEngine.getOutputObject().getResult().equals("FAIL")); // ===> is true
System.out.println("output object:" + $ruleEngine.getOutputObject().getResult()); // ==> object is FAIL ?? Why?

end

规则的输出

output object==true
output object:FAIL

问题1)为什么结果值被设置为“FAIL”,但在“when”检查期间运行第二条规则,结果值仍然是“PASS”

问题2)如何在第二条规则“when”检查子句中将结果值设置为“FAIL”?

最佳答案

Drools 中有一个特定的“函数”可以修改事实,但它不是insert。您在第一条规则中所做的是将事实再次插入到 session 中(导致 Drools 感到困惑)。您正在寻找的是 modify 方法:

rule "1st rule"
dialect "java"
when
$ruleEngine:RuleEngine(outputObject!.result != "FAIL")
then
OutputObject outputObject = new OutputObject();
outputObject.setResult("FAIL" );

modify($ruleEngine){
setOutputObject(outputObject)
};
end

rule "2nd rule"
dialect "java"
when
$ruleEngine:RuleEngine( outputObject!.result == "PASS" )
then
//...
end

希望对你有帮助

关于java - Drools DRL 中的对象传递问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50820301/

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