科特林的标准函数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}}?
我确定我误解了一些东西。也许有人可以帮助我和其他新手更好地理解。
答案 0 :(得分:10)
a?.let
返回您在给定的let块中所做的任何操作,但是a
可能是null
,您不确定是否调用了let
块。这就是x
必须为Boolean?
的原因,或者您需要指定a
为null
时应返回的内容,例如:
val x: Boolean = a?.let { a.contains("maybe") }
?: false // this is used if `a` is null