我对drools相当新,我遇到了一些我无法理解的问题。 我正在尝试解决分配问题,我的一个LHS就像这样
$leftAlloc: SlotAllocation($leftRes: resource ) $rightAlloc: SlotAllocation(this != $leftAlloc, resource == $leftRes)
由于某种原因,即使你确定工作记忆中存在匹配,第二个陈述也不匹配。如果我用以下内容更改上面的代码,它可以正常工作
$leftAlloc: SlotAllocation($leftRes: resource ) $rightAlloc: SlotAllocation(this != $leftAlloc, eval(resource == $leftRes))
有人可以向我解释一下吗?
谢谢!
答案 0 :(得分:1)
你可能最好在drools用户邮件列表中提出这个问题(如果你不想乱丢你的邮箱,可以使用新闻组阅读器连接到news.gmane.org)。
至于你的问题:这真的很奇怪。我只看到一个不可能的解释:
首先你应该知道DRL中的resource == $leftRes)
实际上会调用getResource().equals($leftRes)
,所以它不是一个/指针检查,而是一个等于检查。
另一方面,eval(resource == $leftRes)
将使用相同/指针检查。
因此,不可思议的理论是你的Resource类会覆盖Object.equals
方法,并且当它是同一个实例时甚至不会返回true ...
PS:如果您还有其他问题,请继续在用户邮件列表上进行讨论,并且您也希望这些问题得到解答。