Groovy之旅系列三(數(shù)據(jù)編碼與閉包)
Groovy不同于其它編譯語言的事情之一是你能創(chuàng)建優(yōu)先的類對象.意思是說你
能定義一大堆代碼并且可以在里面放string或integer.看看下面的代碼:
square = {it * it}
這里的it是關(guān)鍵字,不能改變.在花括號里面的表達式"it * it"告訴Groovy編譯器把這個表達
式當作代碼來對待.在軟件世界,這個叫做"閉包".在這個例子中,設(shè)計者 "it" 是你要給這個函數(shù)
賦值的參數(shù).我們像以下方式來訪問:
square(9)
看看結(jié)果是什么:81
再試試下面這句:
square = {(it * it / 2 + 3) /it }
結(jié)果:
Result: 4.8333333333
你可能給square賦一值也沒什么意思.這有一些內(nèi)建函數(shù),你能像這樣做為一個參數(shù)
來調(diào)用它.來看一下"collect"函數(shù)在數(shù)組中的例子:
[ 1, 2, 3, 4 ].collect(square)
這個表達式的意思是,用1,2,3,4創(chuàng)建一個數(shù)組,然后調(diào)用"collect"方法,進入我們上面定義的閉包.collect方法貫穿數(shù)組里的每一項,每一項都調(diào)用閉包,然后把結(jié)果放入一個新數(shù)組中.
結(jié)果是:
[ 1, 4, 9, 16 ]
你能使用更多的參數(shù)閉包,具體可參看
http://groovy.codehaus.org/groovy-jdk.html
默認的閉包帶一個參數(shù)"it",你也能創(chuàng)建閉包用自命名參數(shù).例如方法Map.each()
就是一個閉包兩個參數(shù),它綁定了鍵和值.
printMapClosure = { key, value -> println key + "=" + value }
[ "yue" : "wu", "lane" : "burks", "sudha" : "saseethiaseeleethialeselan" ].each(printMapClosure)
結(jié)果:
yue=wu
lane=burks
sudha=saseethiaseeleethialeselan
還有一些閉包例子:
fullString = ""
orderParts = ["BUY", 200, "Hot Dogs", "1"]
orderParts.each {
fullString += it + " "
}

println fullString
下面是匿名閉包的例子:
myMap = ["asdf": 1 , "qwer" : 2, "sdfg" : 10]

result = 0
myMap.keySet().each( { result+= myMap[it] } )
println result
文件處理:
myFileDirectory = "C:\\temp\\"
myFileName = "myfile.txt"
myFile = new File(myFileDirectory + myFileName)

printFileLine = { println "File line: " + it }

myFile.eachLine( printFileLine )
這個例子打印C:\myfile.txt的內(nèi)容,你可以隨便輸入一些內(nèi)容進行測試.
字符串處理:
stringDate = "2005-07-04"
dateArray = stringDate.split("-")
year = dateArray[0].toInteger()
year = year + 1
newDate = year + "-" + dateArray[1] + "-" + dateArray[2]
這里和Java語法的差不多了.
注意第三行一定要toInteger().
不然的話+1就成拼湊字符串了.
自己運行一下看看輸出結(jié)果吧.
能定義一大堆代碼并且可以在里面放string或integer.看看下面的代碼:

式當作代碼來對待.在軟件世界,這個叫做"閉包".在這個例子中,設(shè)計者 "it" 是你要給這個函數(shù)
賦值的參數(shù).我們像以下方式來訪問:

再試試下面這句:


來調(diào)用它.來看一下"collect"函數(shù)在數(shù)組中的例子:

這個表達式的意思是,用1,2,3,4創(chuàng)建一個數(shù)組,然后調(diào)用"collect"方法,進入我們上面定義的閉包.collect方法貫穿數(shù)組里的每一項,每一項都調(diào)用閉包,然后把結(jié)果放入一個新數(shù)組中.
結(jié)果是:

http://groovy.codehaus.org/groovy-jdk.html
默認的閉包帶一個參數(shù)"it",你也能創(chuàng)建閉包用自命名參數(shù).例如方法Map.each()
就是一個閉包兩個參數(shù),它綁定了鍵和值.


結(jié)果:



還有一些閉包例子:








下面是匿名閉包的例子:






文件處理:








字符串處理:





這里和Java語法的差不多了.
注意第三行一定要toInteger().
不然的話+1就成拼湊字符串了.
自己運行一下看看輸出結(jié)果吧.