看懂Gradle脚本(4)- Groovy语法之运算符重载

本文深入探讨了Gradle脚本中的Groovy语法,特别是运算符重载。通过Task定义的例子,揭示了<<运算符实际上是Task的leftShift方法,这一特性与Ruby语言相似。此外,还解释了Groovy如何为List提供<<运算符支持,以方便添加元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续讨论Task定义

回顾一下前一篇文章的例子:

task myTask {
    doLast {    
        println 'hello world!'    
    }    
}
这段脚本定义了一个名为myTask的任务,并且通过一个闭包对这个任务进行了配置,给它加了一个Action。 doLast是Task的一个方法。因为这种情况很常见,所以Gradle提供了一种更加方便的写法,如下所示:
task myTask << {
    println 'hello world!' 
}

可以少写两行代码 :)

AST转换

AST转换也在前一篇文章里讨论过,下面是经过GradleAST转换之后的脚本:

task('myTask') << {
    println 'hello world!' 
}

运算符重载

理解上面这段脚本的关键点是理解Groovy的运算符重载语法。用过C++语言的人,可能会比较熟悉运算符重载。但是Groovy的运算符重载实现更接近Ruby语言:每一个可重载的运算符都跟一个普通的方法名相对应,并且调用运算符方法时,点号可以省略。上面的<<(左移)运算符,在Groovy眼里,其实就是leftShift方法:

task('myTask').leftShift({
    println 'hello world!' 
})
这里有leftShift的方法签名:

Task leftShift(Closure action) 
从Javadoc可以看出,其作用和 doLast方法完全相同。

结论

Task定义脚本里的<<运算符,实际上是Task的leftShift方法。

举一反三

<<运算符看起来像是往左边的操作数中放入某种东西,这也是为什么Gradle会选择这个运算符来给Task添加一个Action的原因。类似,Groovy给List添加了<<运算符支持,如下所示:

def list = []
list << 1
list << 2
println list
打印出:

[1, 2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值