kotlin标准函数let, run, apply, with, also

kotlin标准函数特点对比

标准函数名称作用域中的接收者返回值
letit作用域的最后一行的对象
runthis作用域的最后一行的对象
withthis作用域的最后一行的对象
applythis调用对象本身
alsoit调用对象本身

let与also

从上表可以看出,let与also作用域中的接收者都是it,但它们比较明显的不同在于返回值的不同。let返回值是作用域的最后一行的对象,而also返回值是调用对象本身。他们都可以在调用时对调用者进行空判断。如下所示:

println("yds"?.let{
    println(it)
    "whx"
})

结果:
yds
whx

println("yds"?.also{
    println(it)
    "whx"
})

结果:
yds
yds

问号就是对前面的调用者进行空判断,如果为空,则不会调用点后面的内容。上述不可能为空,可以去掉问号。

run与with

从上表可以看出,run与with作用域中的接收者都是this, 且返回值都是作用域的最后一行的对象,那他们的区别在哪里呢?run是通过对象调用,而with是通过传参,且run可以在调用之前进行空判断,而with则不能,代码如下:

//可进行空判断
println("yds"?.run{
    println(this)
    "whx"
})
结果:
yds
whx

//不可进行空判断
println(with("yds"){
    println(this)
    "whx"
})
结果:
yds
whx

run与apply

从上表可以看出,run与apply作用域中的接收者都是this, 但他们明显的不同在于run返回的是作用域最后一行的对象,而apply返回的是调用者本身。

println("yds"?.run{
    println(this)
    "whx"
})
结果:
yds
whx

println("yds"?.apply{
    println(this)
    "whx"
})
结果:
yds
yds
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值