task myTask {
doLast {
println 'hello world!'
}
}
等价于
task myTask << {
println 'hello world!'
}
- AST转换
下面是经过GradleAST转换之后的脚本:
task('myTask') << {
println 'hello world!'
}
- 运算符重载
理解上面这段脚本的关键点是理解Groovy的运算符重载,groovy中每一个可重载的运算符都跟一个普通的方法名相对应,并且调用运算符方法时,点号可以省略。上面的<<(左移)运算符,在Groovy眼里,其实就是leftShift方法:
task('myTask').leftShift({
println 'hello world!'
})
leftShift的方法签名:
Task leftShift(Closure action)
-
结论
Task定义脚本里的<<运算符,实际上是Task的leftShift方法。 -
举一反三
<<运算符看起来像是往左边的操作数中放入某种东西,这也是为什么Gradle会选择这个运算符来给Task添加一个Action的原因。类似,Groovy给List添加了<<运算符支持,如下所示:
def list = []
list << 1
list << 2
println list
打印出:[1, 2]
网友评论