Kotlin的let用法

原文链接

let是Kotlin标准库中一个很优美的函数:

1
fun <T, R> T.let(f: (T) -> R): R = f(this)

`let`是一个scoping函数,能够让你在一个变量的范围内对它做一些事情:

1
2
3
File("a.txt").let {
// the file is now in the variable "it"
}

作用在一个可空引用变量(?)上是另一种用法,这样只有在该变量非空的时候才会执行let范围内的代码:

1
2
3
findUser(id)?.let {
// only run if findUser() returned a non null value
}

事实上,这种用法只是一种不带else分支的if用法的变种,是有缺陷的,变量不为空就执行代码,为空的话呢?

我们也可以显式进行lamda表达式调用:

1
2
3
4
val user = findUser(id)
user?.let { foundUser ->
// ...
}

和下面这样的用法基本上一样,下面的不翻译了,没啥意思。

1
2
3
4
val user = findUser(id)
if (user != null) {
// user is now a non null reference
}