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