2011-03-22 4 views
21

Groovy에서 use 키워드를 읽었습니다. 그러나 정확하게 사용 된 것이 무엇인지에 대해서는 밝혀지지 않았습니다. 그리고 나는 또한 카테고리 클래스와 함께,이 주제 아래에 무엇입니까? 그리고 위의 코드와 액션groovy에서 "사용"키워드/메소드를 사용하는 것은 무엇입니까?

class StringCalculationCategory { 
    static def plus(String self, String operand) { 
    try { 
     return self.toInteger() + operand.toInteger() 
    } catch (NumberFormatException fallback) { 
     return (self << operand).toString() 
    } 
    } 
} 

use (StringCalculationCategory) { 
    assert 1 == '1' + '0' 
    assert 2 == '1' + '1' 
    assert 'x1' == 'x' + '1' 
} 

에서 그루비에서, 사람이 그루비에서 use 키워드의 사용은 무엇을 말할 수 있습니까? 그리고 위의 코드는 무엇을합니까?

+0

안녕하세요, 당신은 그만한 가치가 있었습니까? 나는 똑같은 책과 사람을 통해 조금 도전적이다. –

+4

@ 사이먼 : 그 훌륭한 책을 찾을 수있다! –

답변

17

use에 대한 내용은 Pimp My Library Pattern을 참조하십시오.

귀하의 경우에는 String.add(something) 연산자가 오버로드됩니다. 두 문자열이 정수로 사용될 수있는 경우 (toInteger()은 예외를 throw하지 않음) 두 숫자의 합계를 반환하고 그렇지 않으면 문자열의 연결을 반환합니다.

11

사용은 (예 : 라이브러리에서) 소스 코드가없고 해당 클래스에 새 메소드를 추가하려는 경우에 유용합니다. 더스틴 마르크스의 블로그 실제 사건에서 영감을 상태에서 그런데

, this post :

사용 "키워드는"실제로 키워드가 아니라 개체의 Groovy의 GDK 확장의 방법이다 클래스이며, Object.use (카테고리, 클로저)를 통해 제공됩니다. Groovy GDK Object에 기능에 대한 편리한 액세스를 제공하는 많은 다른 방법이 있으며 언어 키워드 또는 기능 과 같이 나타날 수 있습니다. 그 이유는 객체 이름을 처리 할 때 객체 이름이 필요하지 않기 때문입니다. 나는 변수가 내이 Groovy 스크립트에서이 이름 (예 : println 및 sleep)과 함께 잠재적 인 가독성 문제를 피하기 위해 사용하지 않는 경향이 있습니다.

는 다른 유사한 실제로는 Object 클래스의 방법이다 "키워드"와 같은 있다. Groovy JDK documentation에는 이러한 메소드 목록이 있습니다.

관련 문제