with函数:
with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。
val result = with(obj) {
// 这里是obj的上下文
"value" // with
函数的返回值
}
run函数:
with
函数是非常类似的,只是稍微做了一些语法改动而已。首先
run函数要在某个对象的基础上调用;
run
函数只接收一个
Lambda
参数,并且会在
Lambda
表达式中提供调用对象的上下文。其他方面和with
函数是一样的,包括也会使用
Lambda
表达式中的最后一行代码作为返回值返回。
val result = obj.run {
//
这里是
obj
的上下文
"value" // run
函数的返回值
}
apply函数:
apply
函数和
run
函数也是极其类似的,都要在某个对象上调用,并且只接收一个Lambda
参数,也会在
Lambda
表达式中提供调用对象的上下文,但是apply
函数无法指定返回值,而是会自动返回调用对象本身。
val result = obj.apply {
//
这里是
obj
的上下文
}
// result == obj
摘自《第一行代码第3版》