2019-08-07:请举例说明Kotlin中with与apply函数的应用场景和区别?
Moosphan opened this issue · 6 comments
Moosphan commented
2019-08-07:请举例说明Kotlin中with与apply函数的应用场景和区别?
DaveBoy commented
看源码知区别,为了方便我只使用apply和let这两个函数,从来不用with,因为不能防空
apply:返回自身,this指代
let:返回最后一行,it指代
with类似let
chenqi5256969 commented
with:with函数会把它的第一个参数装换成作为第二个参数传给它的lambda的接收者,可以通过this来访问这个接收者。with返回的是执行lambda代码的结果。
apply:apply函数基本与with一致,但是apply返回的是接收者对象。
shuandroid commented
with
不怎么使用,因为它确实不防空;
经常使用的是 run
和 apply
run
闭包返回结果是闭包的执行结果;apply
返回的是调用者本身。- 使用上的差别:
run
更倾向于做一些其他复杂逻辑操作,而apply
更多的是对调用者自身配置。 - 大部分情况下,如果不是对调用者本身进行设置,我会使用
run
。
18361237136 commented
apply:返回自身用this代指
let:返回最后一行 It代指
with:会把它的第一个参数装换成第二个参数传给它的接受者,通过this来访问但它不防空,所以很少用
XJ-Up commented
with:适用于调用同一个类的多个方法时,可以省去类名重复,直接调用;类的方法即可。
apply:具有with的功能,并且可以判空,同时返回对象本身
AndroidJiang commented
函数名 | 函数块内使用对象 | 返回值 | 是否扩展函数 | 适用场景 |
---|---|---|---|---|
apply | this | 自身 | 是 | 适用于run()函数的任何场景,通产可用来在初始化一个对象实例时,操作对象属性并最终返回该对象。也可用于多个扩展函数链式调用 |
also | it | 自身 | 是 | 适用于let()函数的任何场景,一般可用于多个扩展函数链式调用 |
let | it | lambda最后行 | 是 | 适用于对象统一处理不为空的情况 |
run | this | lambda最后行 | 是 | 适用with()、let()函数的任何场景 |
with | this | lambda最后行 | 否 | 适用于调用同一个类多个方法 |