groovy入门4 闭包简介

来源:互联网 发布:淘宝卡哪个好 编辑:程序博客网 时间:2024/05/23 14:33
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+' '
}





0 0
原创粉丝点击