gpt4 book ai didi

groovy - 为什么 groovy 不能处理花括号?

转载 作者:行者123 更新时间:2023-12-02 07:21:22 26 4
gpt4 key购买 nike

在 Android Studio(大概是任何)gradle 文件中,以下代码有效:

task build {
}

一个微小的变化就会导致彻底崩溃:

task build
{
}

这之前在其他线程中也出现过,但是是在修复构建文件的上下文中。我的问题是为什么 gradle/groovy 不能处理任何一种支撑风格?许多其他语言都可以很好地处理它,那么这里有什么大不了的呢?

最佳答案

错误消息中实际上没有问题:

build file '.../build.gradle': 80: Ambiguous expression could be a parameterless closure expression, an isolated open code block, or it may continue a previous statement;
solution: Add an explicit parameter list, e.g. {it -> ...}, or force it to be treated as an open block by giving it a label, e.g. L:{...}, and also either remove the previous newline, or add an explicit semicolon ';' @ line 80, column 1.

由于 Groovy 语法糖使方法以 lambda 作为最后一个参数,所以看起来行语言构造,以下代码块:

task build {}
task build2(type: Copy) {}

等于它们更常规的形式:

task build({})
task build(type: Copy, {})

现在,您实际上并不希望这些花括号来界定常规代码块,而是需要一个 Groovy lambda,它应该作为参数传递给 build 方法。

但是从表面上看,Groovy 无法真正确定它是否真的是一个 lambda,作为参数传递给前一行中的方法,或者当您在中间放置换行符时,它是一个不相关的代码块。就这样,错误消息中描述的含糊之处就在那里。

按照错误消息中的建议,您还可以使用以下语法来代替转义换行符的语法:

task build
{ ->
}

最后,用于调用动态方法(在示例中名为 build)的 task 关键字不是 Groovy 特定的,而是 Gradle DSL 功能。

关于groovy - 为什么 groovy 不能处理花括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44769539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com