drools expert / solver - 5.0.1匹配

时间:2009-08-07 16:25:34

标签: java drools rule-engine drools-planner

我对drools相当新,我遇到了一些我无法理解的问题。 我正在尝试解决分配问题,我的一个LHS就像这样

$leftAlloc: SlotAllocation($leftRes: resource )
$rightAlloc: SlotAllocation(this != $leftAlloc, resource == $leftRes)

由于某种原因,即使你确定工作记忆中存在匹配,第二个陈述也不匹配。如果我用以下内容更改上面的代码,它可以正常工作

$leftAlloc: SlotAllocation($leftRes: resource )
$rightAlloc: SlotAllocation(this != $leftAlloc, eval(resource == $leftRes))

有人可以向我解释一下吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

你可能最好在drools用户邮件列表中提出这个问题(如果你不想乱丢你的邮箱,可以使用新闻组阅读器连接到news.gmane.org)。

至于你的问题:这真的很奇怪。我只看到一个不可能的解释:

首先你应该知道DRL中的resource == $leftRes)实际上会调用getResource().equals($leftRes),所以它不是一个/指针检查,而是一个等于检查。

另一方面,eval(resource == $leftRes)将使用相同/指针检查。 因此,不可思议的理论是你的Resource类会覆盖Object.equals方法,并且当它是同一个实例时甚至不会返回true ...

PS:如果您还有其他问题,请继续在用户邮件列表上进行讨论,并且您也希望这些问题得到解答。