2013年3月25日 星期一

Groovy 的 closure 機制


closure 機制

如果照字面的意思去翻譯,會譯成「打烊」「關閉」,這樣的意思用在程式語言上覺得怪怪的,學理上的意思不用太在意,我們來實地的用小範例來測試就很清楚了。

執行 groovy_home/bin/groovyConsole.bat 會跳出執行視窗,一如其它scripting language (Python, ruby..),可在 console 上直接寫程式並且執行,沒有正規程式語言那種「撰碼->存檔->編譯->執行」的冗長過程,非常適合做簡易的測試。
GroovyConsole 的畫面像左邊的樣子,上面是下指令的地方,下面是執行結果。

我所瞭解的 closure ,就是可先定義一個 function,然後這個 function 就像一個參數一樣到處 "丟",例如下面的平方算式:

square={it*it}
println square(5)
會得到25
如果我相讓一個陣列裡的所有數值都平方呢,可以這樣寫:
[3,5,8,7,2].collect( square )
=========== console ===========
groovy> square={it*it}
groovy> [3,5,8,7,2].collect( square )

Result: [9, 25, 64, 49, 4]

collect 是陣列的內建方式,自動抓出每個元素
it 是 groovy 的預建參數

這個例子中,我們定義的 square 方法只處理一個參數,若我們想處理一個 Map 裡的各個元素呢?

printStudentInfo={key, value -> println "student no.="+key+", name="+value}
["820609":"張大明", "810932":"謝常停", "861329":"馬不停", "870832":"梁山伯"].each(printStudentInfo)

-------執行結果-------
student no.=820609, name=張大明

student no.=810932, name=謝常停

student no.=861329, name=馬不停

student no.=870832, name=梁山伯

沒有留言: