Groovy 代表按预期工作?

标签 groovy

我有一个简短的片段,我尝试将变量解析委托(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/

相关文章:

groovy - 如何在运行时编译 groovy 用户输入的脚本

groovy - 访问静态范围内的全局变量

unit-testing - Gradle Task失败,因为JSHint检测到代码方面的改进

Grails Facebook 注册/登录

java - 我正在寻找不使用 Groovy 的 Java 过度冗长的解决方案

Groovy 编译错误 :Unrecognized Windows Sockets error

amazon-web-services - 如何在 AWS ES 中启用动态脚本?

grails - 集成测试错误H2数据库

groovy - Gradle-我可以使用约定属性管理任务依赖项吗?

spring - 无法在spring boot中启动嵌入式Tomcat