使用赋值“=”和括号{}感到困惑

时间:2014-03-31 10:44:34

标签: groovy gradle

我是gradle的新手(也是groovy),我很难落后于某些概念,并且不知道它是否与groovy或gradle相关以及谷歌有哪些关键词,以获得一些帮助。

我经常偶然发现像:

这样的东西
android {
    [some configuration]
}

那么什么是android?一类?命名空间?属性集合?

但更令人困惑的是:

有时我看到的配置如下:

minSdkVersion 19

这似乎是一项任务,但没有一个等号。 有时会有像

这样的等号的作业
source = "folder/file.java"

所以这很令人困惑。等号与没有等号。所有这些支架的东西。

我看到的所有常规介绍都没有涵盖这些主题。 那么它是一些gradle约定还是真正的groovy语法?

3 个答案:

答案 0 :(得分:16)

在Groovy中,括号有时是可选的。

第一个android正在将闭包传递给Method。即:

void android( Closure config ) {
    println "In Android : ${config()}"
}

android {
    'tim'
}

打印:In Android : tim它与调用相同:

android( {
    'tim'
} )

如果你把parens放回去。

minSdkVersion的第二个示例是相同的,但它将Integer传递给方法。

void minSdkVersion( Integer version ) {
    println "In MinSdkVersion : $version"
}

minSdkVersion 19
// same as minSdkVersion( 19 )

这样就可以打印In MinSdkVersion : 19

最后一个示例是将属性设置为String(正如您所期望的那样)

答案 1 :(得分:5)

严格来说android是一个接受闭包(代码块)的动态方法,可以访问android插件/任务配置的某些内部表示。因此,在该闭包内,您最终要么调用其他方法,要么对可用的属性进行赋值。如果没有等号,那么它是一个方法调用,如果存在那么它是一个纯属性。您可以通过查看插件文档或代表它的对象来了解这个想法。

我认为你可以安全地将这个块称为android插件配置。因为它是代码所影响的。

答案 2 :(得分:1)

在gradle中,您有一些插件,每个插件都包括扩展的属性和方法。

属性是常规属性,其获取器/设置器是auto-generated。当您要更改属性时,幕后发生的事情就是调用它的生成的setter。因此,基本上,这是一个方法调用。

方法调用可以通过多种方式完成(只是语法糖)。例如,您可以省略the paranthesis or commas。我认为该链接应该可以说明您提到的外观。

这些方法和属性的解析方式完全不同。如果您对这些词的来源感兴趣,请检查代表。