【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )(一)

简介: 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )(一)

文章目录

总结

一、静态闭包变量

1、执行普通闭包变量

2、执行静态闭包变量

二、 在闭包中定义闭包

三、 完整代码示例

总结


在闭包中 , 打印 this , owner , delegate , 打印结果都是创建闭包时所在的类 ;


如果在类中创建闭包 , 则打印结果是类 ;

如果在实例对象中创建闭包 , 则打印结果是实例对象 ;

如果在闭包 A 中创建 闭包 B , this 是最外层闭包 A 之外的类 , owner , delegate 是上一层闭包 B ;





一、静态闭包变量



1、执行普通闭包变量


在类中定义闭包变量 , 在闭包中打印 this、owner、delegate 值 ,


class Test2 {
    def closure = {
        println "this : " + this
        println "owner : " + owner
        println "delegate : " + delegate
    }
}


执行上述 Test2 类中的闭包 ,


new Test2().closure()


打印结果如下 : 打印的值都是 Test2 实例对象 ;


this : Test2@5082d622
owner : Test2@5082d622
delegate : Test2@5082d622



2、执行静态闭包变量


如果将闭包声明为静态变量 ,


class Test2 {
    def static closure = {
        println "this : " + this
        println "owner : " + owner
        println "delegate : " + delegate
    }
}


直接使用闭包所在类直接调用闭包 , 不再使用闭包所在类对象调用闭包 ;


Test2.closure()


执行结果为 : 打印的值都是 Test2 类 ;


this : class Test2
owner : class Test2
delegate : class Test2



还是上述静态闭包变量 , 使用 Test2 实例对象调用 ,


new Test2().closure()


打印的结果是创建闭包时所在的类 ;


this : class Test2
owner : class Test2
delegate : class Test2






二、 在闭包中定义闭包


在 Test2 类中定义 闭包变量 closure2 , 在 closure2 闭包中定义 closure3 闭包 ,


class Test2 {
    def closure2 = {
        def closure3 = {
            println "this : " + this
            println "owner : " + owner
            println "delegate : " + delegate
        }
        closure3()
    }
}


打印结果如下 :


this : Test2@291a7e3c
owner : Test2$_closure1@4ae9cfc1
delegate : Test2$_closure1@4ae9cfc1


this 值为 外部的 Test2 实例对象 ;


owner 和 delegate 是 Test2 中定义的 closure2 闭包 ;



创建 closure2 闭包时 , this、owner、delegate 都是 Test2 实例对象 ;


但是创建 closure3 闭包时 , this 的值还是设置 closure2 的 this 值 , owner、delegate 值设置成 closure2 闭包 ;


  // 创建内层闭包时 , 传入的 this 是 外层闭包的 this.getThisObject()

// 创建内层闭包时 , 传入的 this 是 外层闭包的 this.getThisObject() 
    // 因此 this 值仍是 Test2 实例对象 
    // owner、delegate 变为外层的 Closure 闭包 ; 
            Object closure3 = new _closure2(this, this.getThisObject());

 


目录
相关文章
|
3月前
|
缓存 JavaScript 前端开发
|
2月前
|
存储 Rust 程序员
rust中的函数:定义、调用与闭包
本文将深入探讨Rust编程语言中函数的定义、调用方式,以及闭包(closures)的概念和应用。我们将从函数的基本语法出发,逐步深入到函数的参数传递、返回值,再进一步介绍闭包及其捕获环境的能力,帮助读者全面理解并熟练运用Rust中的函数与闭包。
|
4月前
|
人工智能 自然语言处理 前端开发
闭包是什么?闭包的用途是什么?
闭包是什么?闭包的用途是什么?
|
8月前
|
Java
7.1 深入理解闭包与内部类:闭包的概念与应用
7.1 深入理解闭包与内部类:闭包的概念与应用
116 0
【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性
【Swift4】(6) 闭包 | 闭包应用 | 闭包作为函数参数 | 捕获特性
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )(二)
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )(二)
142 0
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员区别 | 静态闭包变量 | 闭包中定义闭包 )(二)
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
137 0
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | this、owner、delegate 成员赋值及源码分析 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
91 0
【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
179 0
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
130 0
【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )