Kotlin中,函数作为参数,T.()->Unit 和 ()->Unit 的区别
时间:2022-06-01
本文章向大家介绍Kotlin中,函数作为参数,T.()->Unit 和 ()->Unit 的区别,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在做kotlin开发中,经常看到一些系统函数里,用函数作为参数,但是又和我们自己写的不太一样
大概是这样子的:
public inline fun <T> T.apply(block: T.() -> Unit): T
{
block()
return this
}
一开始的时候,我很疑惑,我们平时定义的是这样子的啊:
fun <T : View> T.hahaha(f: () -> Unit)
{
}
我们这里注意一下,其实我们的区别,就是系统的是
T.()-Unit
,而我们定义的是()->Unit
这里就很疑惑了,为什么?T不是一个类吗?怎么可以直接 T.() 这是什么意思??
我们这里来看一下文档是怎么说的,
输入图片说明
我们这里看一下画原谅色线的部分,原来这里作用就是可以this代表的对象的不同。
既然这样,我们自己来撸一个看看效果。
我们首先定义两个函数:
fun <T : View> T.afterMersure(f: T.() -> Unit)
{
}
fun <T : View> T.afterMersure2(f: () -> Unit)
{
}
这两个函数是用于,View测量完成之后的回调。 我们看一下调用的时候,是什么情况:
输入图片说明
输入图片说明
呐,看到没有,划重点了啊!,这两个函数唯一的区别就是
T.()-Unit
与()->Unit
的区别,我们调用时,在代码块里面写this,的时候,根据代码提示,我们可以看到,连个this代表的含义不一样,T.()->Unit
里的this代表的是自身实例,而()->Unit
里,this代表的是外部类的实例
The End
- 开始使用Linux
- .Net魔法堂:开启IIS的WebGarden、WebFarm和StateServer之旅
- java中的tuple实现
- MYSQL5.7开启慢查询日志
- 微信又是一次大更新,下拉多任务切换 各种有趣小游戏
- 人工智能有可能超越人类大脑?
- 一种简单的数据库性能测试方法
- xiaomao.com7位数高价成交,并已启用建站
- Docker基于已有的镜像制新的镜像-Docker for Web Developers(3)
- 如何通过Remoting实现双向通信
- jenkins 入门教程(上)
- 让jQuery Tools Scrollable控件在Mobile Web里面支持resize功能
- CentOS6.5上golang环境配置
- 马斯克频发推文,或在揭示特斯拉明年大动作?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如果MySQL的 InnoDB 文件的损坏,该如何手动恢复?
- 如何使用慢查询快速定位执行慢的 SQL?
- 如何使用 EXPLAIN 精准查看执行计划?
- MySQL怎么查看 SQL 的具体执行成本?
- Python 爬虫进阶必备 | 某外卖优惠平台内容加密参数分析
- pytest 自动化测试框架(二)
- Web | Django 与数据库交互,你需要知道的 9 个技巧
- 商机负责人与商机团队负责人不一致时更新团队负责人为商机负责人语句
- mysql常用语句集合(仅供工作日常学习参考)
- 新一代Notebook神器出现,Jupyter危险了!
- vmstat 监视内存使用情况
- Android开发重写Animation实现下拉图片后弹射回去效果示例
- Android 中RxPermissions 的使用方法详解
- Android构建Material Design应用详解
- Android中DrawerLayout实现侧滑菜单效果