天天看點

groovy入門4 閉包簡介

1 閉包 閉包是一個代碼塊,用{}括起來。與java不同的是,groovy中程式代碼也成為一種資料,可以被一個變量所引用。 javascript中var f = function(){} 格式為 {    參數->     代碼 } 具體例子如下: def clouser1 = {     println it //it預設參數 } clouser1.call('zhang')

def closer2 = {     text ->     println text //一個參數 } closer2('this is close2')

def closer3 = { //多個參數     name,age->     println "This is ${name},${age} yeas old" } closer3('zhangsan',20) 額外說明:groovy的這種将代碼塊指派給變量的做法和javascript也有像,不過javascript的寫法是var f = function(){} 2 delegate 其實delegate和java中的上下文類似,delegate将指定待執行代碼的對象。類似于java中 的代碼: interface Target{     void surf(); } class Aoo implments Target{     public void surf(){         System.out.println("Aoo surfing");     } } class Boo implemets Target{     public void surf(){         System.out.println("Aoo surfing");     }     private Target target;     public Boo(){}     public Boo(Target target){         this.target = target;     }     public void invoke(){         target.surf();     } } groovy的delegate屬性: class Net{         def work = {         println 'Net is working'       }     def surf={         println 'Net is surfing'     } }

class AdaptNet{

    def work = {         println 'AdaptNet is working'     }     def surf ={         println 'AdaptNet is surfing'     }         def invoke(closer){        closer.delegate = new Net()        // closer.delegate = new AdaptNet()// close.surf将輸出"AdaptNet is surfing"        closer.surf()//将輸出'Net is surfing        work()     } }

new AdaptNet().invoke{} 3閉包通路集合 def array =[1,2,3,4,5] array.each{     print  it+' ' }

def maps = [name:'s1',age:10,score:85]

maps.each{     data->     print data.key+':'+data.value+' ' }

繼續閱讀