如何使用对象数组调用Groovy闭包

ycl3bljg  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(141)

我可能误解了如何使用varargs,但是根据GroovyDocsforClosures,对于函数public V call(Object... args),arguments参数“可以是单个值或值列表”。
但当我尝试做这样的事情时:

Closure myClosure = { arg1, arg2, arg3 ->
    println arg1 == null
    println arg2 == null
    println arg3 == null
}
 Object[] argsArray = new Object[]{"John", "Jack", "Mack"}
 myClosure.call(argsArray)

编译器会抛出groovy.lang.MissingMethodException:无方法签名:.call()适用于参数类型:([Java语言对象;)
我甚至无法让varargs函数在传入实际的varargs时工作。

def myVarargsFunction(Object... args){
    println "myVarargsFunction"
    myClosure.call(args)
}

这段代码导致了同样的错误(当然是在我改变了Closure myClosure的作用域之后)。我不明白为什么或者这些情况都不起作用。我知道有其他的方法可以让它起作用,我只是想知道为什么它不起作用。

wkyowqbh

wkyowqbh1#

您可以使用分摊运算子:

myClosure.call(*args)

相关问题