69

Web サービスのラッパー メソッドを作成したいのですが、サービスは 2 つの必須パラメーターと 3 つのオプション パラメーターを受け入れます。

より短い例を得るために、次のコードを機能させたいと思います

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

私が達成したいのは、1 つのパラメーターを与え1aて結果として取得することです。これは(最も怠惰な方法で)可能ですか?

4

3 に答える 3

91

このままでは無理…コード

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

基本的に、groovy は次のメソッドを作成します。

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

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

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

1 つの代替手段は、オプションの Map を最初のパラメーターとして持つことです。

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になり、デフォルトが何であるかを知るようにすることは、読者に任されています;-)

于 2013-08-09T14:37:53.830 に答える