内联函数let、also、with、run、apply的用法

let

  1. 在函数体内使用 it 代替调用者访问其公有的属性和方法
    val person = Person("fzh", 22)
    person.let {
        print("name = ${it.name}")
    }
  1. 可以对一个可能为空的对象(object?)进行判空操作
    val person = getPerson()
    // 如果person为null,将不会执行let块
    person?.let {
        print("name = ${it.name}")
    }
  1. 返回值可以为函数的最后一行
    val person = Person("fzh", 22)
    val a = person.let {
        it.name
    }
    print(a) // 输出"fzh"

also

also 的用法和 let 基本一样,区别在于 also 返回的是对象本身。

    val person = Person("fzh", 22)
    val a = person.also {
        it.name
    }
    print(a) // 输出"Person(name=fzh, age=22)"

with

  1. 直接调用类的方法
    val person = Person("fzh", 22)
    with(person) {
        print("name = $name, age = $age")
    }
  1. 返回值可以为函数块的最后一行
    val person = Person("fzh", 22)
    val age = with(person) {
        age
    }
    print("age = $age") // 输出"age = 22"

run

run 可以看作 let 和 with 的结合体。集合了两者的功能和优点,一方面不用 it 代替对象,一方面可以对对象进行判空。

    val person = Person("fzh", 22)
    person.run {
        println("name = $name")
    }
    val age = person.run {
        22
    }
    println("age = $age")
    getPerson()?.run {
        println("run into")
    }

apply

apply 的用法和 run 基本一样,区别在于 apply 返回的是对象本身。可以看作 let 和 also 的结合体

总结

run 可以看作 let 和 with 的结合体。

apply 可以看作 also 和 with 的结合体。

所有一般来说,使用 run 和 apply 就行了。

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值