以下代码将产生断言错误
def foo(a,b,c='awesome',d=null) {
assert d
}
foo(1,2,d='bar')
为什么会出错?为什么d的关键字赋值不起作用?我发现这与Python关键字参数非常不同。
答案 0 :(得分: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。