gpt4 book ai didi

groovy - 方法和属性之间的嵌套闭包解析不同?

转载 作者:行者123 更新时间:2023-12-02 04:51:33 25 4
gpt4 key购买 nike

当闭包的 resolveStrategy 设置为 DELEGATE_ONLYDELEGATE_FIRST 时,嵌套闭包中委托(delegate)的方法和属性之间的解析是不同的。例如,在下面,x 解析为 f 的委托(delegate)(如我所料),但是 keySet() 解析为 g 的代表。

​def g = {->
def f = {
{-> [x, keySet()]}()
}

f.resolveStrategy = Closure.DELEGATE_ONLY
f.delegate = [x: 1, f: 0]

f()
}

g.delegate = [x: 0, g: 0]
g()

结果:[1, ['x', 'g']]

而没有嵌套闭包

def g = {->
def f = {
[x, keySet()]
}

f.resolveStrategy = Closure.DELEGATE_ONLY
f.delegate = [x: 1, f: 0]

f()
}

g.delegate = [x: 0, g: 0]
g()

结果:[1, ['x', 'f']]

这种行为是否在某处预期和记录?是错误吗?

最佳答案

我认为这是一个错误。如果您更改 Expando 的 map ,它的行为会有所不同:

f = {
g = {
{ -> keySet() }()
}

g.delegate = new Expando(a: 1000, b: 900, c: 800, keySet: { 'g keyset' })
g.resolveStrategy = Closure.DELEGATE_ONLY
g()

}

f.delegate = new Expando(a: 90, x: 9, y: 1, keySet: { 'f keyset' })

assert f() == 'g keyset'




f = {
g = {
{ -> keySet() }()
}

g.delegate = [a: 1000, b: 900, c: 800]
g.resolveStrategy = Closure.DELEGATE_ONLY
g()

}

f.delegate = [a: 90, x: 9, y: 1]

assert f().toList() == ['a', 'b', 'c'] // fails :-(

也许填写 JIRA

关于groovy - 方法和属性之间的嵌套闭包解析不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27627463/

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