gpt4 book ai didi

groovy - 将方法作为闭包调用

转载 作者:行者123 更新时间:2023-12-02 11:55:52 24 4
gpt4 key购买 nike

我对 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.&method(6) 与调用 f.method(6) 相同,它将返回 16,因此在您的示例中,您将 16 传递到 invokeClosure 而不是闭包。由于 Integer 类没有 call 方法,这会导致以下异常:

抛出异常:没有方法签名: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 - 将方法作为闭包调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com