我的 Demo.groovy 文件中有以下代码片段
class Person {
String name
}
def name='no name'
def p = new Person(name:'Igor')
def cl = { name.toUpperCase() }
cl.resolveStrategy = Closure.DELEGATE_ONLY
cl.delegate = p
println cl()
根据Groovy文档关于关闭策略http://groovy-lang.org/closures.html
我期望以下输出
伊戈尔
但是代码似乎打印
没有名字
任何人都可以帮助我理解为什么 groovy 在解析策略设置为 DELEGATE_ONLY 的情况下打印 NO NAME 而不是 IGOR 吗?
最佳答案
文档说:
Whenever, in a closure, a property is accessed without explicitly setting a receiver object, then a delegation strategy is involved
在您的示例中,情况并非如此,其中定义了变量name
。删除它,或者将其移到 closere 的定义之后,您将看到预期的结果
class Person {
String name
}
def p = new Person(name:'Igor')
def cl = { name.toUpperCase() }
def name='no name'
cl.resolveStrategy = Closure.DELEGATE_ONLY
cl.delegate = p
println cl()
IGOR
关于Groovy 闭包 DELEGATE_ONLY 和 DELEGATE_FIRST 策略不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994435/