对 Groovy 闭包(this、owner、delegate)的理解

this 指向定义闭包的对象或静态类

owner 跟 this 一样,如果闭包定义在另一个闭包内部,owner 就指向此闭包

delegate 跟 owner 一样,但可以修改


别的语言的闭包,比如 Java,在闭包里访问变量或者调用方法,寻找这些变量和方法的顺序是:

1、闭包作用域

2、方法作用域 / 外层闭包作用域

3、类作用域

Groovy 的顺序是:

1、this

2、owner

3、delegate

在 this、owner 对象上寻找对应 Java 的 1-2-3 作用域

delegate 的意义

它的主要作用是让你在定义闭包时访问一些你不拥有的变量,例如:


闭包

这个花括号就是一个闭包,在这个闭包里面访问了 minSdkVersion、targetSdkVersion、versionCode 三个变量。闭包执行时会先在 this、owner 两个对象上面寻找这三个变量,因为你没有定义这三个变量,所以最后就到 delegate 对象上去找。

defaultConfig 是 android gradle 插件定义的一个方法,你把闭包传给它,它设置闭包的 delegate 为一个配置对象,然后执行闭包。闭包执行时在 delegate (也就是这个配置对象)上找到这三个变量并修改它们。

这个闭包虽然不是在配置对象内部定义,但通过设置 delegate,它还是能修改配置对象,这就是 delegate 的意义。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容