drools:{}结果中的大括号和条件句-大括号与Java中的大括号不同

drools:{}结果中的大括号和条件句-大括号与Java中的大括号不同,drools,Drools,我想我一定错过了一些关于口水的事情。我有一条规则,结果是有条件的。例如: rule "Action Close When Closed" when $action: ActionClose( $id: actionId, $initiator: initiator, $thing: thing ) $open: DroolsPositVertexProperty( vertex == $thing, key == K.N_OPEN, value == fals

我想我一定错过了一些关于口水的事情。我有一条规则,结果是有条件的。例如:

rule "Action Close When Closed"
when
    $action: ActionClose( $id: actionId, $initiator: initiator, $thing: thing )
    $open: DroolsPositVertexProperty( vertex == $thing, key == K.N_OPEN, value == false )
then
    support.deferredOutcome( $initiator, $id, K.O_NOTHING );
    support.retractFact( $action );
    support.tickle( $thing );
    if (support.LOW_LEVEL_TRACE)
        System.out.printf("%s: thing already closed\n", drools.getRule().getName());
end

让我困惑的是,如果我使用if(){}形式(使用大括号),条件的行为就像我所怀疑的那样,但即使在不应该使用大括号时也会触发。我在文档中遗漏了什么吗?这是7.40.0决赛。所有人都说牙套会起作用,但它们不应该起作用。或者我错过了一些非常重要的事情。有什么指针吗?

为了支持自定义语句,例如
modify{}
,结果中总会涉及一些重写

解析Java代码的边缘情况,例如“如果没有大括号”,实际上并不是那么简单(特别是因为空格在某些情况下可能很重要,而在纯Java中则不是)


长话短说,总是在结果中使用明确的大括号。谢谢:)

我发现Drools对右手边这样的东西非常挑剔。在我的一些规则中,我必须实际执行
if(someCondition==true)
,显然你应该能够执行
if(someCondition)
(其中someCondition是一个布尔值)。对此我没有任何解释,但我在Drools 5.0.tl中看到这种奇怪的行为一直发生;博士,用牙套就行了。无论如何,这被认为是最好的做法。也就是说,你可能想考虑使用侦听器来将日志添加到规则中。谢谢你的想法。碰巧这只是启动系统时的一些临时调试,所以我可能会很快删除它,而不是使用侦听器。但是关于长期方法的观点很好。好的,谢谢你的评论。如果第4.1.9节(DRL(THEN)中的规则操作)包含这样的注释,那就太好了。从6月初开始我就一直在玩口水游戏,但现在仍然完全出乎意料。非常感谢您的反馈@Borris see