2012-12-04 108 views
1

結合下面的代碼會產生一個斷言錯誤Groovy的關鍵字參數

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

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

爲什麼會給出一個錯誤?爲什麼d的關鍵字分配不工作?我發現這與Python關鍵字參數非常不同。

回答

3

Groovy不會像Python一樣執行關鍵字參數。

首先,語法是類似於地圖的。取而代之的

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

你需要

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

其次,常規不能參數關鍵字的名稱映射。在常規做到這一點的方法是接受關鍵字參數作爲地圖:這個是怎麼在這裏常規手柄

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

更多細節:http://groovy.codehaus.org/Extended+Guide+to+Method+Signatures