2013-08-09 14 views
26

Chciałbym napisać metodę otoki dla usługi internetowej, usługa akceptuje 2 parametry obowiązkowe i 3 opcjonalne.Metoda Groovy z opcjonalnymi parametrami

Aby mieć krótszy przykład, chciałbym, aby uzyskać następujący kod roboczy

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

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

Wyjście jest:

12 
a2 
[pParm2:a]2 
a2 
bc 

Co chciałbym osiągnąć to dać jeden parametr i uzyskać 1a w wyniku. Czy to możliwe (w leniwy sposób)?

Odpowiedz

47

Nie można zrobić w takiej formie ... Kod

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

Zasadniczo sprawia porywające utworzyć następujące metody:

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

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

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

Alternatywą byłoby mieć opcjonalny Mapa jako pierwszy 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' 

Oczywiście, dokumentowanie tego, aby inni wiedzieli, co dzieje się w magicznej map i jakie są wartości domyślne pozostawia się czytelnikowi ;-)

+0

Dzięki, wydaje się, że jest to droga. Zrobię to i porównuję z wysiłkiem, gdy użyję wartości NULL jako domyślnych dla parametrów opcjonalnych. Przychodząc ze świata java jestem całkiem przyzwyczajony do tego ... – Chris

+0

Mam rację, sygnaturą myMethod powinno być 'def myMethod (String mandatory1, String mandatory2, Map map = [:])'? –

+1

Nie, inaczej, jak w odpowiedzi –

30

Możesz użyć argumentów z wartościami domyślnymi.

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

jeśli argument "opcjonalny" nie istnieje, zmienia się na wartość null.

+0

To, co już zrobił. Problem polega na tym, że można pominąć tylko ostatnie argumenty z wartościami domyślnymi. –

Powiązane problemy