1

次のコードはアサーションエラーを生成します

def foo(a,b,c='awesome',d=null) {
    assert d
}

foo(1,2,d='bar')

なぜエラーが発生するのですか?dのキーワード割り当てが機能しないのはなぜですか?これはPythonのキーワード引数とは大きく異なります。

4

1 に答える 1

3

Groovyは、Pythonとまったく同じようにキーワード引数を実行しません。

まず、構文はマップに似ています。それ以外の

foo(1,2,d='bar')

あなたが必要

foo(1,2,d:'bar')

第二に、groovyは引数を名前でキーワードにマップすることはできません。groovyでこれを実現する方法は、キーワード引数をマップとして受け入れることです。

def foo(Map kwargs, a, b, c='awesome') { [a,b,c,kwargs.d] }
assert foo(1,2,d:'bar') == [1,2,'awesome','bar']

groovyがこれを処理する方法の詳細については、http://groovy.codehaus.org/Extended+Guide+to+Method+Signaturesを参照してください。

于 2012-12-04T18:00:32.593 に答える