我有一个简短的片段,我尝试将变量解析委托给委托人。但是,不使用委托值,而是使用所有者值。这是故意的还是错误?
class Person {
int age
}
def age = -5
def closure = { -> age }
closure.delegate = new Person(age: 99)
closure.resolveStrategy == Closure.DELEGATE_ONLY
assert closure.call() == 99
上面的代码失败,闭包返回 -5。
您的代码返回-5
因为变量age
是在闭包的词法范围内定义的,这意味着闭包可以使用变量的值age
.
您必须明确告诉闭包使用委托的age属性:
def closure = { -> delegate.age }
尝试以下代码:
class Person {
int age
}
def age = -5
def closure = { -> delegate.age * age }
closure.delegate = new Person(age: 99)
closure.resolveStrategy == Closure.DELEGATE_ONLY
assert closure.call() == 99*-5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)