task myTask {
doLast {
println 'hello world!'
}
}
等價(jià)于
task myTask << {
println 'hello world!'
}
- AST轉(zhuǎn)換
下面是經(jīng)過(guò)GradleAST轉(zhuǎn)換之后的腳本:
task('myTask') << {
println 'hello world!'
}
- 運(yùn)算符重載
理解上面這段腳本的關(guān)鍵點(diǎn)是理解Groovy的運(yùn)算符重載赂弓,groovy中每一個(gè)可重載的運(yùn)算符都跟一個(gè)普通的方法名相對(duì)應(yīng),并且調(diào)用運(yùn)算符方法時(shí)驶拱,點(diǎn)號(hào)可以省略客蹋。上面的<<(左移)運(yùn)算符昨登,在Groovy眼里蕴掏,其實(shí)就是leftShift方法:
task('myTask').leftShift({
println 'hello world!'
})
leftShift的方法簽名:
Task leftShift(Closure action)
結(jié)論
Task定義腳本里的<<運(yùn)算符,實(shí)際上是Task的leftShift方法缚窿。舉一反三
<<運(yùn)算符看起來(lái)像是往左邊的操作數(shù)中放入某種東西棘幸,這也是為什么Gradle會(huì)選擇這個(gè)運(yùn)算符來(lái)給Task添加一個(gè)Action的原因。類似倦零,Groovy給List添加了<<運(yùn)算符支持误续,如下所示:
def list = []
list << 1
list << 2
println list
打印出:[1, 2]