在 1.8 控制台中运行以下命令:
def accessories = null
final int prime = 31;
int result = 1;
result = prime
* result
+ ((accessories == null) ? 0 : accessories
.hashCode());
我收到一个编译错误,指出:
意外标记:* 位于第 5 行,第 13 列
但是,当我将“* result”移动到上一行时,它可以干净地编译并运行。我一直在寻找解释,但到目前为止还没有运气。有人可以解释一下吗?
def accessories = null
final int prime = 31;
int result = 1;
result = prime * result
+ ((accessories == null) ? 0 : accessories
.hashCode());
最佳答案
因为Groovy的语句不是用;
分隔的,而是用换行符分隔的。它无法知道下面的行是上面行语句的延续。您可以转义换行符:
int i = 10 \
* 9
assert i == 90
<小时/>
更新:
实际上,Groovy 确实识别了上面一行中的一些语句。至少这个点被识别了:
assert [1, 2]
.join("")
.padLeft(4, "a") == "aa12"
还有一个包含 +
、-
和 ~
(也许还有更多)的语句 could be methods :
def m = "aa"
- m // fails with "No signature of method: java.lang.String.negative()"
关于groovy - 为什么出现意外 token : * in when doing operation over two lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17030874/