2017-04-14 44 views
0

我是新来的gradle,一些gradle让我困惑。有些东西看起来像不一致的编码/配置风格。为什么Gradle中的配置风格不一致?

例如,当我们将存储库配置为jcenter或mavencentral时,我们调用一个函数/方法,例如jcenter。

repositories { 
    jcenter() 
} 

然而,在同一文件中,当我们尝试配置的依赖,我们不调用函数/方法了。

dependencies { 
    classpath 'com.android.tools.build:gradle:2.3.1' 
} 

然后有明确的变量获取值

productFlavors { 
    prod { 
     versionName = "1.0-paid" 
    } 
    mock { 
     versionName = "1.0-free" 
    } 
} 

我相信有这样的感觉身后inconcistency一个原因,但是当我通过文档阅读找不到任何东西。有谁能解释原因吗?

回答

2

其实这些例子并没有那么不同。

classpath 'com.android.tools.build:gradle:2.3.1' 

也是函数调用。 Groovy(写Gradle构建脚本的语言)可以让你在很多情况下在参数中省略括号。

+0

谢谢。这有帮助。 –

2

这是Groovy提供的Gradle使用的语言的灵活性(我更喜欢这种不一致性)。 在Groovy中,如果名称后跟匹配参数,则可以调用带有或不带括号的函数/方法,但如果没有参数,则必须添加括号以使其成为对函数的调用,并使其与代表的闭包截然不同。 下面是使用groovysh的示例

groovy:000> def a(){println "a"} 
===> true 
groovy:000> a 
===> [email protected] 
groovy:000> a() 
a 
===> null 
groovy:000> def b(arg){println arg} 
===> true 
groovy:000> b 
===> [email protected] 
groovy:000> b "argument" 
argument 
===> null 
groovy:000> b("argument") 
argument 
===> null 
groovy:000> 
+0

非常有帮助。现在我知道Groovy中的方法调用可能看起来不同(带/不带圆括号),我想我可以看到早些时候看起来不同的相似之处。但是,仍然有一些变量获取值,而不是带有参数的方法调用。对此有何评论? –

+0

不确定你的意思没有一个坚实的例子。赋值变量通过使用'=' - 赋值运算符明确区分。当没有'='时,必须有一个方法调用。 然而,它有一个转折点。当'='与字段一起使用时,groovy会调用setter(如果存在的话)。请看这个例子https://gist.github.com/anonymous/a1077e23489a9ea51813f87ad256dad6 –

相关问题