2011-01-28 2 views
2

대소 문자를 구분하지 않고 두 필드를 비교해야합니다. 다음과 같은 규칙이 있습니다.Drools : 대소 문자를 구분하지 않습니까?

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

그리고 같은 대소 문자를 사용할 수 있습니다. 내가 필요로하는 것은 이와 같은 것이지만 작동하지 않는 것 같습니다 :

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

작동 방법에 대한 제안이 있으십니까? Google 검색 결과에서 '일치'를 사용하라는 제안이 나오지만 일치 연산자는 하드 코딩 된 패턴에 대해서만 작동하는 것 같습니다.

+0

equalsIgnoreCase을) 메소드가 작동해야합니다. SSCCE (http://sscce.org)를 게시하면 문제가 무엇인지 알 수 있습니다. – camickr

답변

9

를 사용하여 평가. equalsIgnoreCase 메서드도 예제 코드에 오타가있었습니다.

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 만 삭제). 또한 equalsIgnoreCase()를 사용하여 특별히 테스트하지는 않았지만 Drools 설명서에 따르면 eval 키워드없이 eval() 표현식을 코딩 할 수 있어야하며 객체 표현식 내부에서 사용할 때는 괄호를 사용하지 않아야합니다. 다음과 같은 형태가 있습니다 : ObjectTypeB (name.equalsIgnoreCase (foo.name)) – Armand

-4

== 내용과 비교하는 것을 의미 :

name.equalsIgnoresCase (foo.name)이 동시에 대물 기준과 비교하는 것을 의미한다.

가정하자.
soo.name = "ram"; foo.name = "램";
if (soo.name == foo.name)는 false를 반환합니다.
내용이 객체와 동일하지 않기 때문입니다.

foo.name = "ram"과 같이 말하면;
soo.name = foo.name;
경우 (soo.name == foo.name) ** 반환 ** 진정한

+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 질문을 해결하는 데 도움이되었다고 생각하기 때문에 +1도 얻었 으면합니다.) –

관련 문제