首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加新属性时引用Expando对象?

添加新属性时引用Expando对象?
EN

Stack Overflow用户
提问于 2013-09-01 00:00:46
回答 1查看 660关注 0票数 0

下面的示例来自Groovy in Action (2007)一书的清单7.22:

代码语言:javascript
复制
def boxer = new Expando()
assert null == boxer.takeThis
boxer.takeThis = 'ouch!'
assert 'ouch!' == boxer.takeThis
boxer.fightBack = {times -> return this.takeThis * times }
assert 'ouch!ouch!ouch!' == boxer.fightBack(3)

我将代码放入脚本hello.groovy中。当我运行它时,我得到了以下错误:

代码语言:javascript
复制
Caught: groovy.lang.MissingPropertyException: No such property: takeThis for class: hello
groovy.lang.MissingPropertyException: No such property: takeThis for class: hello
    at hello$_run_closure1.doCall(hello.groovy:5)
    at hello.run(hello.groovy:6)

显然,第5行中的this不是指boxer对象,而是指脚本。那么,将fightBack属性添加到Expando boxer的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-01 00:37:32

this替换为delegate

this指的是脚本(正如您提到的),delegate是指调用闭包的调用方。

您可以得到thisdelegateowner 这里的用法差异。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18553939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档