Groovy閉包理解
阿新 • • 發佈:2019-01-02
關於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?
未完待續....