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)
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |