2012-12-04 107 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