本文描述的重点
其他相关文章顺便讲了原理或者一大堆其他东西,代码示例相对冗长。
相比起关心它们怎么实现,官方文档说的啥,
我更关心它们该如何使用!
其他问题,用的过程中自然可以找资料或者自行解决
所以本文旨在简要说明它们的用法。
.
run
先看它名字:run
在哪里run ?在 T 里面run!
看代码——
//示例
var x = T.run { test() ; true }
//T是任意非空类型,后文同理
//test()是T中的方法,后文同理
//返回值即最后一个表达式的值:true
----> x = true
总结:run带的块,其执行环境是 T 内部,且返回最后一个表达式的值
.
let
let更好记,let it go嘛
所以直接看代码——
//示例1
var x = T.let { it.test() ; true }
//it在let块中默认存在,指代 T
//上述代码即以下代码的缩写:
var x = T.let { it -> it.test() ; true }
//示例2
var x = T.let { otherName -> otherName.test() ; true }
//——当然你看it不爽你也可以换个名字让它go,是吧
//返回值即最后一个表达式的值:true
----> x = true
总结:let带的块,其执行环境和块外一致,且默认用关键字 it 指代 T ,且返回最后一个表达式的值。
另:你看 it 不爽可以给它改名
.
apply
还是先看名字,想想:apply给谁?
好了,就想到这里。
看代码——
//示例
var x = T.apply { test() ; true }
//编译器将警告,大意:“ true ” unused
----> x = T
总结:apply带的块,其执行环境为 T 内部,且返回值为 T 本身
即:它是用来执行T内的某操作,且不期望获取其返回结果的
——所以kotlin官方注释说你可用它链式初始化一个对象
.
also
显而易见,对一个对象处理的时候 also 想处理……
看代码——
//示例
var x = T.also { it.test() ; true }
//
----> x = T
总结:和 apply 同样,返回的是 T 本身,区别在于 it
.
额外
break、continue只能作用于当前块
上述"执行环境为 T 内部"的说法——不准确,因为 块内 同样可以调用 块外 可调用的任何函数、任何值
*此文系Cormor首发于CSDN,转载请注明原链接
*如有帮助,欢迎点赞打赏