1

我对流口水还很陌生,我遇到了一些我无法真正理解的问题。我正在尝试解决分配问题,而我的 LHS 之一是这样的

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

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

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

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

谢谢!

4

1 回答 1

1

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

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

首先,您应该知道resource == $leftRes)在 DRL 中实际上会调用getResource().equals($leftRes),因此它不是相同/指针检查,而是等于检查。

另一方面,eval(resource == $leftRes)将使用相同/指针检查。所以这个不太可能的理论是你的 Resource 类覆盖了Object.equals方法,当它是同一个实例时甚至不返回 true ......

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

于 2009-09-13T08:36:25.743 回答