如何解决在Groovy 3.0中更改了对象字段访问的行为?
我最近在协助迁移某些旧代码时偶然发现了这个问题。
以下用于在Groovy 2.4.x中正确执行:
class Person {
String name
}
def me = new Person( name : 'Joe' )
assert me.(name) == 'Joe'
在Groovy 3.0.2上执行时会引发异常:
groovy.lang.MissingPropertyException:无此类属性:类的名称:MyScript
将属性名称括在括号中实际上对我来说是错误的:事实上,令我惊讶的是,在较早的版本中也未引发异常。
我可能会使用的语法是:
assert me.name == 'Joe'
或类似的东西
assert me.'name' == 'Joe'
在2.4和3.0版本中均可使用。
我进行了一些研究,发现从Groovy 2.4到Groovy 3.0的变更日志中找不到任何可能影响此行为的东西。
我在这里想念东西吗?
该代码在2.4中工作的事实是否为意外行为,已得到纠正? 还是实际上可以预期?
我的猜测是,这与切换到3.0版中新的Parrot解析器有关。
谢谢!
解决方法
将属性名称包装在括号中时,例如“ me。(name)”,则使用动态属性语法。 Groovy应该在封闭范围内解析“名称”,而不是针对接收者。如果要从“ me”获取“ name”属性,则可以编写“ me.name”或“ me.'name'”或“ me ['name']”或“ me.getProperty('name') “。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。