1. 程式人生 > >Groovy閉包理解

Groovy閉包理解

關於groovy閉包的很多講解,都是含糊不清,或者是過於“專業”,

現在,我將以一種通俗易懂的方式表述內容

先要宣告這裡所講的是groovy閉包,和其他語言的閉包固然不能相等

groovy閉包是指一個可執行的程式碼塊:(定義)

          作為形式可以看成是java中的一個方法,僅限於形式(存在形式);

          比如一個人和一隻貓都以生命的形式存在於地球,但是兩者所做的很多事是不一樣的,而做同一件事也有不同的方式

          做同一件事效率也不一樣,也就是說各自有各自擅長的方面

我認為定義並不重要,請看一下閉包的使用形式(用法)

          def clos = {   param ->  method   }

        注:這不是一個正確的表達形式,筆者為了方便解說做了變化,

        上面這個形式:param是引數(方法的引數),當然這裡可以有多個引數,多個引數用逗號隔開(沒有引數的情況暫不考慮)

        method表示方法,這裡是寫方法的地方,這個方法的引數來自於前面的param引數列表,

        引數和方法之間用“ ->”連線

        看這些理論實在是枯燥,我也不喜歡,下面用舉例的方式講解groovy的閉包一般形式,用法,以及優點

def greeting = 'hello'     //第一行
def clos = {param->println "${greeting} ${param}" }        
clos("jiege")                                                                       
def demo(clo){                                                            
    def greeting = 'jon'
    clo.call("ken")
}
//demo() clos       //error
demo clos        //output : hello ken
demo() {param->println "welcome ${param}"}    //output : welcome ken
demo {param->println "welcome ${param}"}      //output : welcome ken

這個例子取自一本書上,但書上的解釋並不好,

我假設看這篇文章的人都是對groovy有基礎語法做前提的,所以我並不打算解釋groovy的一般語法

第二行程式碼中的方法部分很簡單隻有一個輸出語句,

第三行程式碼和第六行是的等效的

第四行把閉包作為一個引數傳入demo函式,於是你知道了閉包的這樣一種用法,但你並不需要知道為什麼可以這樣

看了第九行輸出結果你也許已經開始注意在第五行了,對,這行確實沒有起到任何作用,why?

未完待續....