给出以下groovy函数:
def foo(List<String> params, Closure c) {...}
方法调用将是:
foo(['a', 'b', 'c']) { print "bar" }
但是我想在函数调用中删除括号(List)。类似的东西:
foo('a', 'b') { print "bar" }
我无法将list参数更改为varargs,因为varargs只能是函数中的最后一个参数(这里的闭包是最后一个参数)。
有什么建议吗?
答案 0 :(得分:11)
看到无法实现您想要的功能(在Groovy文档中使用您的特定案例是一个问题,不幸的是他们正在迁移文档,因此我无法直接链接现在),沿着这些方向做些什么:
def foo(String... params) {
println params
return { Closure c ->
c.call()
}
}
foo('a', 'b') ({ println 'woot' })
现在你需要将封闭物放在parantheses中,但你不再需要使用数组了..
答案 1 :(得分:5)
我认为只有使用数组作为参数或Variable-Length Argument List:
才能实现这一点def foo(Object... params) {
def closureParam = params.last()
closureParam()
}
foo('a', 'b') { print "bar" }
答案 2 :(得分:5)
总是穷人的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}
...
我只是半开玩笑。