Groovy:为什么这段代码不起作用?无法解决课程

时间:2011-10-30 22:06:15

标签: groovy

我有这个测试代码:

def p = [:]

p.foo = [:]

p.foo.bar = 120

p.foo.bar - 3

(p.foo.bar) + 3

为什么在最后一个语句中出现编译错误:“无法解析类p.foo.bar”?

感谢您的帮助

Groovy版本1.8.1

1 个答案:

答案 0 :(得分:3)

好吧,我想我弄明白了。我针对您的示例脚本运行了AST浏览器(使用GroovyConsole)。它只会在 Conversion 阶段显示输出。在此阶段,您可以看到脚本的转换方式。关键是最后一行转换为:

...
((1) as p.foo.bar)

这意味着,显然,它正在尝试强制转换 1到名为p.foo.bar的类。

你可以深入挖掘一下,看看解析器正在解析这样的语句:

(p.foo.bar)(+1)

相同
(p.foo.bar)1

因此,解析器/编译器将+视为一元+运算符。这就是你得到错误的原因。 (围绕它的方法是删除括号,或交换参数的顺序!)