为什么..let即使计算结果为非null也会返回nullable

时间:2018-09-17 13:19:50

标签: 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函数返回了{ {1}}?

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

1 个答案:

答案 0 :(得分:10)

a?.let返回您在给定的let块中所做的任何操作,但是a可能是null,您不确定是否调用了let块。这就是x必须为Boolean?的原因,或者您需要指定anull时应返回的内容,例如:

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