groovy:如何将varargs和闭包同时传递给方法?

groovy:如何将varargs和闭包同时传递给方法?,groovy,closures,Groovy,Closures,给定以下groovy函数: def foo(List<String> params, Closure c) {...} 但是我想去掉函数调用中的括号(List)。比如: foo('a', 'b') { print "bar" } 我无法将list参数更改为varargs,因为varargs只能是函数中的最后一个参数(这里闭包是最后一个) 有什么建议吗 我认为只有将数组用作参数或: 看到不可能完全实现您想要的(Groovy文档中写到,您的具体案例是一个问题,不幸的是,他们正在迁移文

给定以下groovy函数:

def foo(List<String> params, Closure c) {...}
但是我想去掉函数调用中的括号(List)。比如:

foo('a', 'b') { print "bar" }
我无法将list参数更改为varargs,因为varargs只能是函数中的最后一个参数(这里闭包是最后一个)


有什么建议吗

我认为只有将数组用作参数或:


看到不可能完全实现您想要的(Groovy文档中写到,您的具体案例是一个问题,不幸的是,他们正在迁移文档,所以我现在无法直接链接),那么以下几点如何:

def foo(String... params) {
    println params
    return { Closure c ->
        c.call()
    }
}

foo('a', 'b') ({ println 'woot' })

现在你需要把闭包放在Paranthese中,但你不需要再使用数组了。

总是有穷人的Varargs™

def foo(String p1,                                  Closure c) {foo [p1],             c}
def foo(String p1, String p2,                       Closure c) {foo [p1, p2],         c}
def foo(String p1, String p2, String p3,            Closure c) {foo [p1, p2, p3],     c}
def foo(String p1, String p2, String p3, String p4, Closure c) {foo [p1, p2, p3, p4], c}
...

我只是半开玩笑。

这是我倾向于避免的解决方案,因为我将不再控制参数类型。可以发送整数或其他对象来代替字符串。@mhshams您可以使用
string。。。strings
varargsnm,我想我现在明白了,您需要
Closure c
作为最终参数。
foo(def…params)
将使它看起来比Java风格稍微更为Groovy,如果您不得不使用它的话。
def foo(String... params) {
    println params
    return { Closure c ->
        c.call()
    }
}

foo('a', 'b') ({ println 'woot' })
def foo(String p1,                                  Closure c) {foo [p1],             c}
def foo(String p1, String p2,                       Closure c) {foo [p1, p2],         c}
def foo(String p1, String p2, String p3,            Closure c) {foo [p1, p2, p3],     c}
def foo(String p1, String p2, String p3, String p4, Closure c) {foo [p1, p2, p3, p4], c}
...