作用域函数

Catalogue   

以下是根据预期目的选择作用域函数的简短指南:

  • 对一个非空(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)来访问。
  • 返回值 是上下文对象本身。