| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Kotlin:对letapplyrunalso等作用域函数的理解 -> 正文阅读 |
|
[移动开发]Kotlin:对letapplyrunalso等作用域函数的理解 |
在理解这些函数之前,先从源码中摘抄出相关的代码, 放在一起,方便比较,总结规律(省略了函数的注解和部分代码, 不影响理解,了解这些代码的可以略过)
以下是对4个内联函数的归纳
按照参数分类:let和also可以分为一类,run和apply分为一类, 1:let和also的相同点: 参数都是一个普通函数, 而且把调用者T作为一个参数传递到参数函数中,这样,在这个参数函数的作用域中就可以使用T这个参数了; 而且这个T参数还有一个默认的名称 it,it这个变量名称是可以修改的,如果不明白为啥能修改,可以把(T)-> R看成(it:T)-> R这样的普通函数,it就是个变量名称,也可以改成其他的名称(t:T)-> R或是 (a:T)-> R,不管是it,t,a,都指代的是T的实例对象。 ![]() ? ![]() ? 1.1: let和also的不同点: 返回值不一样,let的返回值跟它的参数函数的返回值是一致的,let的返回值是由参数函数的返回值决定的,参数函数的返回值是这个函数的最后一行或是指定的return对象 而also的返回值,指定了就是this,谁调用就返回谁, ?2:run和apply的相同点 ?他们的参数函数都是T.() -> 返回值 这种形式,T.() -> 返回值的意思就是 T的扩展函数是() -> 返回值, .的意思就是的
通俗的讲就是哪个实例调用的run和apply,那么传递的参数函数就是这个实例所在类的一个扩展函数。 既然apply和作为参数的扩展函数都是属于T的, 那么在参数的扩展函数中,就可以使用this来指代这个T的实例了, 可以想一下, 原有函数也好,扩展函数也好, 都是属于同一个类,那么在扩展函数也是可以使用this, 所以在apply和run函数中都可以使用this来指代调用者,? ?那么这里的this,可不可以修改呢?答案是不可以的。这里的this跟上面说的it不是一个概念,it是一个变量名称,当然可以想改就改了,this是指代调用者,比如说上面的这个例子,this就是指代的button,button就是一个变量名称,已经固定了,就不能再做更改了。 2.2:run和apply的不同点 ?就是返回值类型不同了,run函数的返回值是取决于参数函数的返回值类型,所以run函数的返回值就是作为参数的扩展函数的返回值,可以是任意类型,那就看扩展函数中最后返回的是什么了 apply的返回值就不一样了,它的返回值已经固定了,就是返回this,意思是谁调用apply,就返回谁,比如上面的例子button调用了apply,那么返回的就是button。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/19 1:50:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |