2009-10-17 5 views
7
def array = [1,2,3,4,5] 
println 3 in array 

프린트 true. 모든 개체에 대해 in을 지원하려면 무엇을 과부하해야합니까?Groovy에서 in 연산자를 어떻게 오버로드합니까?

예 :

class Whatever { 
    def addItem(item) { 
     // add the item 
    } 
} 

def w = new Whatever() 
w.addItem("one") 
w.addItem("two") 
println "two" in w 

은 내가이 클래스는 공공 사용 컬렉션을 만들 수 알지만, 내가 대신 in를 사용하고 싶습니다.

+0

무엇을하고 싶습니까? –

답변

8

나는 Groovy 메일 링리스트에서 물었습니다. Here's 스레드. 대답은 isCase

class A 
{ 
    def isCase(o) { 
    return false; 
    } 
} 

a = new A() 
println 6 in a // returns false 
+0

달콤한. 빠른 검색 후에 http://docs.codehaus.org/display/GROOVY/JN2535-Control#JN2535-Control-ConditionalStatements –

+0

+1에 문서화 된 것 같습니다. 결국 Guillaume Laforge에 +1하여 투표 할 수 있었으면 좋겠습니다. 결국 그는 메일 링리스트에서 답변을 드리겠습니다. ;-) – Leonel

1

가능하면 회원 운영자 (in)가 Operator Overloading 페이지에 표시되지 않습니다.

+0

나는 그것을 또한주의했다. – Geo

2

WhateverCollection 또는 Collection 하위 인터페이스를 구현할 수 있습니다. Groovy는 Objectiterator()implementation을 가지고 있으며 집계 객체에서 작업하는 연산자처럼 보이며 Groovy는 객체를 Collection으로 변환 한 다음 집계 함수를 수행하려고 시도합니다.

의 경우 WhateverIterable 일 수 있습니다. 나는 아직도 이것에 대한 참조를 찾고 그것을 확인하기위한 개념 증명을 쓰려고 노력하고있다.

Groovy documentation for the Iterator Pattern은 이것이 작동 함을 나타냅니다.

관련 문제