1

私は drools にかなり慣れていないので、よく理解できない問題に直面しています。割り当ての問題を解決しようとしていますが、LHS の 1 つが次のようになります

$leftAlloc: SlotAllocation($leftRes: リソース)
$rightAlloc: SlotAllocation(これ != $leftAlloc, リソース == $leftRes)

なんらかの理由で、2 番目のステートメントは何にも一致しません。たとえワーキング メモリに一致があると確信していてもです。上記のコードを次のように変更すると、正常に動作します

$leftAlloc: SlotAllocation($leftRes: リソース)
$rightAlloc: SlotAllocation(this != $leftAlloc, eval(resource == $leftRes))

誰か私にこれを説明できますか?

ありがとう!

4

1 に答える 1

1

drools ユーザー メーリング リストでこの質問をした方がよいでしょう (メールボックスを散らかしたくない場合は、ニュースグループ リーダーを使用して news.gmane.org に接続してください)。

あなたの質問に関しては、それは本当に奇妙です。ありそうもない説明が1つしかありません。

resource == $leftRes)最初に、DRL では実際に が呼び出されることを知っておく必要がありますgetResource().equals($leftRes)。したがって、これは同じ/ポインター チェックではなく、等しいチェックです。

一方、eval(resource == $leftRes)same/pointer チェックを使用します。ありそうもない理論は、 Resource クラスがObject.equalsメソッドを上書きし、同じインスタンスの場合でも true を返さないということです...

PS: さらに質問があり、それらにも回答してほしい場合は、ユーザー メーリング リストでこの議論を続けてください。

于 2009-09-13T08:36:25.743 に答える