我有一个简短的片段,我尝试将变量分辨率委托给委托。但是,不使用委托值,而是使用所有者值。这是故意还是这个错误?
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。
答案 0 :(得分:3)
您的代码返回-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