groovy – 将方法作为闭包调用
发布时间:2020-12-14 16:29:36 所属栏目:大数据 来源:网络整理
导读:我对Groovy运算符的理解.是它将方法调用转换为闭包.因此,似乎以下代码(可以在 Groovy console中运行)应该工作: class Foo { def method(def param) { param + 10 }}def invokeClosure = {Closure closure - return closure.call()}def f = new Foo()invokeC
我对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)} 它工作得很好,但是我对这个问题的理解有什么不对.操作符? 谢谢, 解决方法
使用.& ;;将方法转换为闭包时.你记下参数的表示法. 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()在这种情况下有效的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |