2013-06-05 5 views
1

Groovy는 Ruby의 bang 메소드와 비슷한 것을 가지고 있습니까? this blog post에서Groovy의 메소드들

: 루비에서

, 당신은 이름에 종료 방법을 쓸 수 있습니다! (느낌표 또는 "강타"). 언제, 왜, 그렇게하고 싶은지에 관한 많은 혼란이 있습니다.

! !로 끝나는 메소드 이름에서! "이 방법은 위험합니다"또는 더 정확하게,이 방법은 다른 이름과 동등한 메서드의 "위험한"버전이며 같은 이름에서 빼기!를 의미합니다. "위험"은 상대적입니다. 그! 그것은 비슷하지만 쾅없는 방법 이름에 해당에있어 모든 않는 메소드 이름에 아무것도 의미하지 않는다 *

그리고 this site은 :.

당신은 방법의 쌍의 수를 찾을 수 있습니다 , 쾅하고 하나는 제외하고. 강타가없는 사람들은 액션을 수행하고 액션 결과 (문자열 활용, 배열 정렬 등)를 반영하여 새로 작성된 객체를 반환합니다. 같은 메소드의 뱅 버전은 액션을 수행하지만, 기존의 액션을 수행합니다. 새 객체를 만드는 대신 원본 객체를 변형합니다.

답변

1

아니, (현재 v2.1.4 기준) 그루비는 루비처럼이 그루비의 대회되지 않습니다

3

같은 것을 가지고 있지 않습니다.

// define method with quoted name 
def 'dangerous!'() { 
    // do something dangerous 
} 

// invoke method with quoted name 
'dangerous!'() 
+0

정확하게 시도했지만 문자열을 사용하지 않았을 때 대답하지 않았습니다. 고마워. :) – dmahapatro

1

이 옵션에 추가하려면, 더 - 그루비 같은 또는 자바 - 될 또 다른 솔루션 : 당신은 항상 문자열처럼 인용해야한다는 제한과 ! 같은 문자가 포함 된 이름이 방법을 쓸 수 있습니다 그러나 같은 같은 자리에서 활성화 선택적 매개 변수 (일명 위험) 변경을 포함하는 것입니다 :

def processFoo(Foo item, mutate = false) { 
    if(!mutate) { 
     Foo temp = new Foo() 
     // copy item properties 
     item = temp 
    } 
    item.bar = 'blah blah' 
    // process item here 
    return item 
} 

processFoo(myFoo) // makes a copy 
processFoo(myFoo, true) // modifies original 

이 패턴이 사용됩니다 -이기는하지만 반대의 방식으로 - 컬렉션에 sort 방법. sort(false)List으로 호출하면 원래 배열이 변경되지 않습니다. sort() 또는 sort(true)을 호출하면 직접 수정됩니다.