在 Kotlin 中,作用域函数 let、run、with、apply 和 also 它们之间的功能差异是什么?请分别说明其接收者与返回值的特点。
考察说明
考察对 Kotlin 作用域函数各自特性及适用场景的理解。
回答思路
- 【回答框架 1】let 以 it 作为参数引用接收者,返回 lambda 表达式的结果,常用于非空检查后执行操作。
- 【回答框架 2】run 与 let 类似,但接收者以 this 引用,返回 lambda 结果,可避免变量命名冲突。
- 【回答框架 3】with 接收者作为第一个参数传入,在 lambda 内以 this 引用,返回 lambda 结果,适合对同一对象进行多次操作。
- 【回答框架 4】apply 以 this 引用接收者,返回接收者自身,常用于对象配置初始化。
- 【回答框架 5】also 以 it 引用接收者,返回接收者自身,适用于额外操作如日志打印。
- 【关键点 1】let 和 also 使用 it 引用接收者,run 和 with 使用 this,apply 使用 this 并返回对象。
- 【关键点 2】返回值区别:let、run、with 返回 lambda 结果,apply、also 返回接收者对象。
- 【关键点 3】选择依据:需要返回值时用 let/run,需要链式配置时用 apply,需要副作用时用 also。
- 【易错点 1】容易混淆不同函数返回值和接收者引用方式。
- 【易错点 2】在 lambda 内使用 this 可能遮蔽外部 this 导致问题。