Groovy代表按计划工作?

时间:2015-09-03 06:33:30

标签: groovy

我有一个简短的片段,我尝试将变量分辨率委托给委托。但是,不使用委托值,而是使用所有者值。这是故意还是这个错误?

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。

1 个答案:

答案 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