【问题标题】:How to call a Groovy Closure with an Object Array如何使用对象数组调用 Groovy 闭包
【发布时间】:2022-07-01 00:42:29
【问题描述】:

我可能对如何使用可变参数有误解,但根据Groovy Docs for Closures,对于函数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: No signature of method: .call() is applicable for argument types: ([Ljava.lang.Object;)

当传入一个实际的可变参数时,我什至无法让可变参数函数工作。

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

此代码导致相同的错误(当然,在我更改了Closure myClosure 的范围之后)。 我不明白为什么这两种情况都不起作用。我知道还有其他方法可以使它起作用,我只是想了解为什么这不起作用。

【问题讨论】:

    标签: groovy


    【解决方案1】:

    您可以使用扩展运算符:

        myClosure.call(*args)
    

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2014-03-07
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多