鉴于以下groovy功能:
def foo(List<String> params, Closure c) {...}
Run Code Online (Sandbox Code Playgroud)
方法调用将是:
foo(['a', 'b', 'c']) { print "bar" }
Run Code Online (Sandbox Code Playgroud)
但我想在函数调用中摆脱括号(List).就像是:
foo('a', 'b') { print "bar" }
Run Code Online (Sandbox Code Playgroud)
我无法将list参数更改为varargs,因为varargs只能是函数中的最后一个参数(这里的闭包是最后一个参数).
有什么建议吗?
Gre*_*rin 12
看到不可能完全实现你想要的东西(它是用Groovy文档编写的,你的具体案例是一个问题,不幸的是他们正在迁移文档所以我现在无法直接链接),这些内容如下:
def foo(String... params) {
println params
return { Closure c ->
c.call()
}
}
foo('a', 'b') ({ println 'woot' })
Run Code Online (Sandbox Code Playgroud)
现在你需要将闭包放在parantheses中,但你不需要再使用数组了..
我认为这只有在使用数组作为参数或可变长度参数列表时才有可能:
def foo(Object... params) {
def closureParam = params.last()
closureParam()
}
foo('a', 'b') { print "bar" }
Run Code Online (Sandbox Code Playgroud)
总有穷人的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}
...
Run Code Online (Sandbox Code Playgroud)
我只是半开玩笑.
归档时间: |
|
查看次数: |
12120 次 |
最近记录: |