我有一个简短的片段,我尝试将变量解析委托(delegate)给委托(delegate)人。但是,不使用委托(delegate)值,而是使用所有者值。这是故意的还是错误?
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
是在闭包的词法范围内定义的,这意味着闭包可以使用变量 的值年龄
。
您必须明确告诉闭包使用委托(delegate)的年龄属性:
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
关于Groovy 代表按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32368483/