例如:
def m(arg, ...args) {
println "arg: $arg"
println "args: $args"
}
m('arg', k:'v')
输出:
arg:['k':'v']
args:['arg']
我认为正确的输出应该是
args:['arg']
arg:['k':'v']
答案 0 :(得分:5)
Groovy对于map参数有一个特殊的排序规则,如果它们占据参数列表中的第一个位置
def fn(Map params, ...args) {
println "params = $params and args = $args"
}
然后,使用以下方法调用方法:
fn(1, 2, 3, something:'else')
将打印:
params = [something:else] and args = [1, 2, 3]
Groovy对Closure参数也有特殊的排序规则,如果它们是最后一个参数:
def fn2(a, b, Closure cl) {
cl(a, b)
}
然后,您可以在调用方法时将它们放在括号之外,即:
println fn2(1, 2) { a, b -> a + b } // prints 3
因为你已经省略了所有参数的类型,所以它只是将地图作为第一个参数