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