groovy – 将方法作为闭包调用

我对Groovy运算符的理解.是它将方法调用转换为闭包.因此,似乎以下代码(可以在 Groovy console中运行)应该工作:

class Foo {
  def method(def param) {
    param + 10
  }
}

def invokeClosure = {Closure closure ->
   return closure.call()
}

def f = new Foo()
invokeClosure f.&method(6)

当然,如果我将最后一行更改为

invokeClosure {f.method(6)}

它工作得很好,但是我对这个问题的理解有什么不对.操作符?

谢谢,

解决方法

使用.&amp ;;将方法转换为闭包时.你记下参数的表示法. f.&方法(6)与调用返回16的f.method(6)相同,因此在您的示例中,您将16传递给invokeClosure而不是闭包.由于Integer类没有调用方法,因此导致以下异常:

抛出异常:没有方法签名:java.lang.Integer.call()

下面将f.method的方法指针传递给invokeClosure,并且通常会使用.&.

class Foo {
  def method(def param) {
    param + 10
  }
}

def invokeClosure = {Closure closure ->
   return closure.call(6) // can leave off .call
}

def f = new Foo()
invokeClosure f.&method

正如您所指出的,以下内容将起作用:

invokeClosure {f.method(6)}

那是因为你传递的是一个不带参数的闭包,这就是为什么closure.call()在这种情况下有效的原因.

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...