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


    继续讨论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]

  • 相关阅读:
    GitHub入门之一:使用github下载项目
    Android Fragment 真正的完全解析(下)
    Android Fragment 真正的完全解析(上)
    c# 发送邮件
    SmartThreadPool
    虚拟机
    相关系数
    为枚举类型添加说明 zt
    MD5
    hashcode
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6815983.html
Copyright © 2020-2023  润新知