看懂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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章