2013-08-09 2 views
26

webservice에 대한 래퍼 메서드를 작성하고 싶습니다.이 서비스는 2 개의 필수 매개 변수와 3 개의 선택적 매개 변수를 허용합니다.선택적 매개 변수가있는 Groovy 메서드

내가

def myMethod(pParm1='1', pParm2='2') { 
    println "${pParm1}${pParm2}" 
} 

myMethod(); 
myMethod('a') 
myMethod(pParm2:'a') // doesn't work as expected 
myMethod('b','c') 

작업에 다음 코드를 좀하고 싶습니다, 짧은 예를 가질 출력은 다음과 같습니다

12 
a2 
[pParm2:a]2 
a2 
bc 

내가 달성하고자하는 하나 개의 매개 변수를 제공하고 얻는 것입니다 그 결과로 1a. 이것이 가능한가요? (가장 게으른 방식으로)?

약자로

답변

47

수행 할 수 없습니다 ...

def myMethod(pParm1='1', pParm2='2'){ 
    println "${pParm1}${pParm2}" 
} 

는 기본적으로 만드는 코드를 끝내 다음과 같은 방법 작성 :

Object myMethod(pParm1, pParm2) { 
    println "$pParm1$pParm2" 
} 

Object myMethod(pParm1) { 
    this.myMethod(pParm1, '2') 
} 

Object myMethod() { 
    this.myMethod('1', '2') 
} 

하나의 대안이 같은 선택적인지도를하는 것을 첫째 PARAM :

def myMethod(Map map = [:], String mandatory1, String mandatory2){ 
    println "${mandatory1} ${mandatory2} ${map.parm1 ?: '1'} ${map.parm2 ?: '2'}" 
} 

myMethod('a', 'b')    // prints 'a b 1 2' 
myMethod('a', 'b', parm1:'value') // prints 'a b value 2' 
myMethod('a', 'b', parm2:'2nd') // prints 'a b 1 2nd' 

물론,이 때문에 다른 사람을 문서화하면 마법에서 잘 알 수 map 및 기본값은 독자에게 맡깁니다 ;-)

+0

감사합니다. 이동 방법과 같아 보입니다. 나는 그것을 줄 것이고 선택적인 매개 변수에 NULL 값을 디폴트로 사용할 때의 노력과 비교할 것이다. 자바 세계에서 나는 꽤 익숙하다. – Chris

+0

맞다. myMethod의 서명은'def myMethod (String mandatory1, String mandatory2, Map map = [:])'이어야한다. –

+1

아니, 다른 방법 라운드 대답으로 –

30

기본값을 사용하여 인수를 사용할 수 있습니다.

def someMethod(def mandatory,def optional=null){} 

"optional"인수가 없으면 null로 바뀝니다.

+0

이것은/그녀가 이미 한거야. 문제는 기본값을 가진 마지막 인수 만 생략 할 수 있다는 것입니다. –

관련 문제