我是新手,并且有些事情让我感到困惑。有些东西看似不一致的编码/配置风格。
例如,当我们将存储库配置为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"
}
}
我确信这种不一致的原因背后有一个原因,但在阅读文档时找不到任何内容。有人可以解释一下原因吗?
答案 0 :(得分:2)
实际上这些例子并没有那么不同。
classpath 'com.android.tools.build:gradle:2.3.1'
也是一个函数调用。 Groovy(编写gradle构建脚本的语言)允许您在很多情况下省略参数的括号。
答案 1 :(得分:2)
这是Groovy使用的语言灵活性(我更喜欢这种不一致性)。 在Groovy中,如果函数/方法的名称后跟匹配参数,则可以调用函数/方法,但如果没有参数,则必须添加括号以使其成为对函数的调用,并使其与它所代表的闭包不同。 这是一个使用groovysh的例子
groovy:000> def a(){println "a"}
===> true
groovy:000> a
===> org.codehaus.groovy.runtime.MethodClosure@95e33cc
groovy:000> a()
a
===> null
groovy:000> def b(arg){println arg}
===> true
groovy:000> b
===> org.codehaus.groovy.runtime.MethodClosure@d771cc9
groovy:000> b "argument"
argument
===> null
groovy:000> b("argument")
argument
===> null
groovy:000>