1.3_Groovy 閉包和對(duì)象

閉包_是groovy語(yǔ)言的一個(gè)聲明函數(shù)的方式. 它有2個(gè)非常有趣的特性:

一是:是一個(gè)值(像一個(gè)string,number一樣)可以賦給一個(gè)變量

二是:在其類部可以使用可觸及范圍內(nèi)聲明的變量

1.聲明閉包

task groovy {}

def foo = "One million dollars"

def myClosure = {

????println "Hello from a closure"

????println "The value of foo is $foo"

}

myClosure() // 調(diào)用與函數(shù)調(diào)用一樣

def bar = myClosure // 又是一個(gè)值,可以賦值給變量

def baz = bar

baz()

2.對(duì)于參數(shù),閉包有另一種表示方式

????def doubleIt = { x -> x + x}

3.groovy語(yǔ)言是允許高階式函數(shù)編程,即可以將一個(gè)函數(shù)作為參數(shù)坐傳遞給別一個(gè)參數(shù)

def applyTwice(func, arg){

????????func(func(arg))

}

foo = 5

def fooDoubledTwice = applyTwice(doubleIt, foo)

println "Applying doubleIt twice to $foo equals $fooDoubledTwice"

4.對(duì)于List列表groovy有自己非常簡(jiǎn)單處理方式-用閉包

def myList = ["Gradle", "Groovy", "Android"] // 聲明一個(gè)list數(shù)據(jù)集

def printItem = {item -> println "List item: $item"} // 定義一個(gè)閉包,打印list中的每一個(gè)item元素

myList.each(printItem) // list.each(closure)函數(shù) 接受一個(gè)閉包

當(dāng)然,我們還可以更加簡(jiǎn)化這種表示方式,聲明閉包在一行里,去除兩個(gè)大括號(hào),除此之外

如果一個(gè)閉包接受的是單個(gè)參數(shù)的話,默認(rèn)情況,這個(gè)參數(shù)名稱用"it"表示,如下簡(jiǎn)化上例打印list的表示方式

? ?myList.each{println "Compactly printing each list item: $it"}?

5.類的聲名:groovy聲名一個(gè)類有非常簡(jiǎn)單的語(yǔ)法,groovy聲明的類底層本質(zhì)上就是java class,而groovy會(huì)自動(dòng)為其class的屬性會(huì)自動(dòng)生成getter和setter方法

class GroovyGreeter {

????String greeting = "Default greeting"

????def printGreeting(){println "Greeting: $greeting"}

}

def myGroovyGreeter = new GroovyGreeter()

myGroovyGreeter.printGreeting()

myGroovyGreeter.greeting = "My custom greeting"

myGroovyGreeter.printGreeting()

6.groovy的最后一個(gè)特性是閉包可以有一個(gè)代理對(duì)象.任何在閉包中沒(méi)有在本地定義的變量或方法,可以通過(guò)代理對(duì)象進(jìn)行賦值

def greetingClosure = {

????greeting = "Setting the greeting from a closure"

????printGreeting()

}

// greetingClosure() // This doesn't work, because `greeting` isn't defined

greetingClosure.delegate = myGroovyGreeter

greetingClosure() // This works as `greeting` is a property of the delegate

更多資料,如下連接

http://learnxinyminutes.com/docs/groovy/

http://www.groovy-lang.org/documentation.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語(yǔ)閱讀 4,041評(píng)論 0 7
  • Groovy :是一種動(dòng)態(tài)語(yǔ)言。 1:這種語(yǔ)言比較有特點(diǎn),它和 Java 一樣,也運(yùn)行于 Java 虛擬機(jī)中。簡(jiǎn)單...
    PeytonWu閱讀 1,674評(píng)論 0 1
  • 什么是 Groovy? 簡(jiǎn)言之,Groovy是一種基于JVM(Java虛擬機(jī))的敏捷動(dòng)態(tài)開(kāi)發(fā)語(yǔ)言。它是一種成熟的面...
    北緯26閱讀 4,268評(píng)論 0 14
  • 參考:深入理解Android之Gradle Groovy與Java的區(qū)別Groovy語(yǔ)法Groovy基礎(chǔ)——Clo...
    蒸汽飛船閱讀 4,860評(píng)論 0 2

友情鏈接更多精彩內(nèi)容