的Groovy闭包DELEGATE_ONLY和DELEGATE_FIRST策略不工作

我有下面的代码片段在我Demo.groovy文件的Groovy闭包DELEGATE_ONLY和DELEGATE_FIRST策略不工作

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

我期待下面的输出

IGOR

但是代码似乎打印

NO NAME

任何人可以帮助我了解为什么常规打印NO NAME,而不是用IGOR决心策略设置为DELEGATE_ONLY?

回答:

文档说:

无论何时,在一个封闭,一个属性没有明确设置一个接收器对象访问,然后一个代表团策略参与

这是不是在情况下,你例如,定义变量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策略不工作 的全部内容, 来源链接: utcz.com/qa/265905.html

回到顶部