首页 > 解决方案 > 为什么 ?.let 即使计算结果为非 null 也返回 nullable

问题描述

Kotlin 的标准函数let是这样定义的:

public inline fun <T, R> T.let(block: (T) -> R): R

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

为什么这不起作用?

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

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

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

标签: kotlin

解决方案


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

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

推荐阅读