2011-01-28 18 views
2

大文字小文字を区別しない方法で2つのフィールドを比較する必要があります。私は次のようなルールを持っています:Drools:大文字と小文字を区別しない比較?

foo : ObjectTypeA() 
bar : ObjectTypeB(name == foo.name) 

これは、大文字と小文字の区別がありません。私が必要とするのはこのようなものですが、うまくいかないようです。

foo : ObjectTypeA() 
bar : ObjectTypeB(name.equalsIgnoreCase(foo.name)) 

どのように動作させるにはどうすればいいですか?グーグルは「マッチ」を使用するための提案をヒットしますが、マッチ演算子はハードコードされたパターンに対してのみ作用するようです。

+0

equalsIgnoreCase( )メソッドが機能するはずです。 SSCCE(http://sscce.org)を投稿して、あなたが間違っていることを確認できるようにしてください。 – camickr

答えて

9

evalを使用します。 equalsIgnoreCaseメソッドも、サンプルコードにtypoがありました。

bar : ObjectTypeB( eval(name.equalsIgnoreCase(foo.name))) 

あなたのようなものを使用したい場合は:あなたはDroolsのカスタム演算子を見てみることができます

ObjectType(name equalsIgnoreCase foo.name) 

を。例: http://members.inode.at/w.laun/drools/CustomOperatorHowTo.html

+1

Drools 5.3以降では、評価をカッコで囲むだけでevalを暗示することができます(単語evalを削除します)。また、これはequalsIgnoreCase()で特にテストされていませんが、Droolsのドキュメントによれば、evalキーワードなしでeval()式をコーディングでき、オブジェクト式内で使用される場合はかっこは使用できません。 次のようなものがあります:ObjectTypeB(name.equalsIgnoreCase(foo.name)) – Armand

-4

==:

name.equalsIgnoresCase(foo.name)しながら、オブジェクト参照を比較することを意味:内容を比較することを意味します。

と仮定します。
soo.name = "ram"; foo.name = "ram";
if(soo.name == foo.name)return false
唯一の内容はオブジェクトと同じではないためです。

私たちがfoo.name = "ram"のように言うならば;
soo.name = foo.name;
if(soo.name == foo.name)** return ** true

+6

Drools LHSでは、==はequalsと同じですが、内容を比較します。 –

2

あなたはトニーは、あなたが&ペーストをコピーして、equalsIgnoreCase方法をサポートするために、このクラスを調整することができます述べたように、カスタム演算子を使用する場合:

https://github.com/droolsjbpm/droolsjbpm/blob/master/drools-core/src/main/java/org/drools/base/evaluators/StrEvaluatorDefinition.java

エドソン

+1

私はToniの答えを選んだのですが、私は実際に私が別のDroolsの問題を解決するのに役立つと思うので、 ) –

関連する問題