drools эксперт / солвер - 5.0.1 совпадений - PullRequest
1 голос
/ 07 августа 2009

Я довольно новичок в слюнях и сталкиваюсь с некоторыми проблемами, которые не могу понять. Я пытаюсь решить проблему выделения, и один из моих LHS выглядит следующим образом

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

по какой-то причине второе утверждение не соответствует ничему, даже если я уверен, что в рабочей памяти есть совпадение. Если я изменю код выше со следующим, он прекрасно работает

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

Кто-нибудь может мне это объяснить?

Спасибо!

1 Ответ

1 голос
/ 13 сентября 2009

Возможно, вам лучше задать этот вопрос в списке рассылки пользователей drools (используйте программу чтения групп новостей, чтобы подключиться к news.gmane.org, если вы не хотите мусорить в своем почтовом ящике).

Что касается вашего вопроса: это действительно странно. Я вижу только одно невероятное объяснение:

Сначала вы должны знать, что resource == $leftRes) в DRL на самом деле вызовет getResource().equals($leftRes), так что это не проверка того же самого / указателя, а проверка равенства.

С другой стороны, eval(resource == $leftRes) будет использовать такую ​​же проверку / проверку указателя. Таким образом, эта невероятная теория состоит в том, что ваш класс Resource перезаписывает метод Object.equals и даже не возвращает true, когда это тот же экземпляр ...

PS: Продолжите обсуждение в списке рассылки, если у вас есть дополнительные вопросы, и вы хотите, чтобы на них тоже отвечали.

...