以下是根据预期目的选择作用域函数的简短指南:
- 对一个非空(non-null)对象执行 lambda 表达式:let
- 将表达式作为变量引入为局部作用域中:let
- 对象配置:apply
- 对象配置并且计算结果:run
- 在需要表达式的地方运行语句:非扩展的 run
- 附加效果:also
- 一个对象的一组函数调用:with
区别
上下文引用
run、with 以及 apply 通过关键字 this 将上下文对象引用为 lambda 表达式的接收者。反过来,let 及 also 将上下文对象引用为 lambda 表达式参数。如果没有指定参数名,对象可以用隐式默认名称 it 访问。it 比 this 简短,带有 it 的表达式通常更易读。
返回值
根据返回结果,作用域函数可以分为以下两类:
- apply 及 also 返回上下文对象。
- let、run 及 with 返回 lambda 表达式结果.
let
- 上下文对象作为 lambda 表达式的参数(it)来访问。
- 返回值是 lambda 表达式的结果。
with
- 上下文对象作为接收者(this)使用。
- 返回值是 lambda 表达式结果。
run
- 上下文对象 作为接收者(this)来访问。
- 返回值 是 lambda 表达式结果。
apply
- 上下文对象 作为接收者(this)来访问。
- 返回值 是上下文对象本身。