为什么?.let返回可为空,即使它的计算结果为非null

osr*_*srl 6 kotlin

Kotlin的标准功能let定义如下:

public inline fun <T, R> T.let(block: (T) -> R): R
Run Code Online (Sandbox Code Playgroud)

这不意味着let的返回类型将是块返回的任何内容吗?

为什么这不起作用?

var a: String? = "maybe null" 
val x: Boolean = a?.let { 
    a.contains("maybe") // note that contains returns Boolean, not Boolean?
}
Run Code Online (Sandbox Code Playgroud)

这抱怨:类型不匹配:必需Boolean,找到Boolean?它不应该返回一个Boolean因为contains函数返回一个Boolean

我确定我误解了一些事情.也许有人可以帮助我和其他新手更好地理解.

Rol*_*and 10

a?.let返回你在给定的let-block中做的任何事情,但是你a可能null不确定是否let甚至调用了-block.这就是为什么x必须是Boolean?或者你需要指定应该返回的a内容null,例如:

val x: Boolean = a?.let { a.contains("maybe") }
                  ?: false // this is used if `a` is null
Run Code Online (Sandbox Code Playgroud)