Groovy:为什么这段代码不';不行?无法解析类

Groovy:为什么这段代码不';不行?无法解析类,groovy,Groovy,我有这个测试代码: def p = [:] p.foo = [:] p.foo.bar = 120 p.foo.bar - 3 (p.foo.bar) + 3 为什么在最后一条语句中出现编译错误:“无法解析类p.foo.bar” 谢谢你的帮助 Groovy 1.8.1版好的,我想我已经解决了。我针对您的示例脚本运行了AST浏览器(使用GroovyConsole)。它只会在转换阶段显示输出。在这个阶段,您可以看到脚本是如何转换的。关键是最后一行转换为: ... ((1) as p.foo

我有这个测试代码:

def p = [:]

p.foo = [:]

p.foo.bar = 120

p.foo.bar - 3

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

谢谢你的帮助


Groovy 1.8.1版

好的,我想我已经解决了。我针对您的示例脚本运行了AST浏览器(使用GroovyConsole)。它只会在转换阶段显示输出。在这个阶段,您可以看到脚本是如何转换的。关键是最后一行转换为:

...
((1) as p.foo.bar)
这意味着,显然,它试图将
1
转换成名为
p.foo.bar
的类

您可以再深入一点,看到解析器正在解析语句,如下所示:

(p.foo.bar)(+1)
这和

(p.foo.bar)1

因此,解析器/编译器将
+
视为一元
+
运算符。这就是为什么你会出错。(删除括号或交换参数顺序的方法!)

hmmm,(p.foo[bar])+3起作用-可能编译器搞糊涂了。哇,这太奇怪了。奇怪的是,这是有效的:
(p.foo).bar+3
。我还尝试使用具有已定义属性的类,但得到了相同的错误!它看起来像这样插入括号,使它寻找一个名为“代码> P.FoO < /代码>的包,它被称为<代码> BAR 。你认为编译器/解析器的行为是正确的还是像一个错误/ bug?可能是意外的,但绝对不是一个bug。包装单个类是强制转换的标准方式。我也不知道这是怎么写的。