- 标准let内置函数对泛型进行了let函数扩展,根据let函数源码,泛型的类型参数并未明确指定,因此所有类型任何地方都可以使用let函数;
- 所有类型.let{} 其实是一个匿名Lambda表达式,Lambda表达式的最后一行会被默认为返回值类型,因此最后一行是什么类型,let函数就返回什么类型;
- 源码:
// 函数有lambda表达式,高阶函数规范需要加 inline
// <T, R> T.let, T代表要为任何类型扩展出一个函数名let的函数,R代表Lambda表达式最后一行返回的数据
//
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
网友评论