关键字参数的Groovy绑定

时间:2012-12-04 17:39:05

标签: binding groovy keyword-argument

以下代码将产生断言错误

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

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

为什么会出错?为什么d的关键字赋值不起作用?我发现这与Python关键字参数非常不同。

1 个答案:

答案 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