groovy – 将方法作为闭包调用

groovy – 将方法作为闭包调用,第1张

概述我对Groovy运算符的理解.是它将方法调用转换为闭包.因此,似乎以下代码(可以在 Groovy console中运行)应该工作: class Foo { def method(def param) { param + 10 }}def invokeClosure = {Closure closure -> return closure.call()}def f 我对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()在这种情况下有效的原因.

总结

以上是内存溢出为你收集整理的groovy – 将方法作为闭包调用全部内容,希望文章能够帮你解决groovy – 将方法作为闭包调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1234705.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存