groovy - 为什么出现意外 token : * in when doing operation over two lines

标签 groovy

在 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/

相关文章:

java - JSR-292(invokedynamic)对 Groovy 性能有多大影响?

grails - ConsumerTemplate:指示接收端点是动态的,因此不应该对其进行缓存

grails - 在 groovy 类中访问 grailsApplication 或 Service

rest - Jenkins : execute HTTP request without 3rd party libraries 的 Groovy 脚本

java - 从 URL 读取图像

grails - 如何处理 groovy 方法中的多个返回类型?

jenkins - 将整个 Jenkins 阶段提取到共享库?

groovy - Gradle:强制自定义任务始终运行(无缓存)

grails - 在具有equals方法的域类上, 'as JSON'出现Grails 2.5.5错误

groovy - 过滤一组数据