【问题标题】:drools expert / solver - 5.0.1 matches流口水专家/求解器 - 5.0.1 匹配
【发布时间】:2012-08-10 18:40:43
【问题描述】:

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

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

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

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

谁能给我解释一下?

谢谢!

【问题讨论】:

  • 你能发布你的 SlotAllocation bean 的样子吗?

标签: java drools rule-engine drools-planner


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的回答 Geoffrey,我试图访问 nabble 上的 drools 用户邮件列表,但我认为他们正在从 nabble 1.0 迁移到 2.0,而我从未被接受?无论如何,关于我与 jboss 接触的问题,他们正在调查。我知道 eval 和 == 之间的区别,我正在逐步执行代码,而 equals 方法根本没有被调用!顺便说一句 - 我正在使用你的求解器,我真的很喜欢。我们可能需要稍微扩展它(分支和绑定?)如果发生这种情况,如果您想将它包含在主干中,我一定会尝试与您联系
  • 欢迎进行分支绑定实验,只需在 github 上 fork 我们并向我发送拉取请求即可:) 我也想实现分支绑定,但要做到这一点,规划器 (=solver) 需要对领域有更多了解(可能带有注释或其他东西),因此必须正确完成。
  • 但是,话虽如此,根据我的经验,分支和绑定的扩展性不足以用于生产用途。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
相关资源
最近更新 更多