我对以下两个 Kotlin 代码片段感到困惑:
A:
val r: Result<Unit> = Result.success(Unit).map { Result.success(Unit) }
Run Code Online (Sandbox Code Playgroud)
乙:
val r: Result<Int> = Result.success(Unit).map { Result.success(1) }
Run Code Online (Sandbox Code Playgroud)
代码片段 A 可以编译,而代码片段 B 则不能编译。
有人可以解释一下为什么代码片段 A 适用于 Kotlin 类型系统吗?
您不应该从 lambda 返回结果map。您应该返回一个包含在结果中的值。这就是你的代码 B 失败的原因。只需要 就可以成功map { 1 }。
代码 A 成功,因为当 Kotlin 期望 lambda 返回 Unit 时,无论 lambda 中的最后一行代码是什么,它都会隐式返回 Unit。如果不这样做,任何没有返回值的 lambda 都必须以显示 Unit 的行结束。同样,任何没有显式返回值的函数都具有隐式返回类型 Unit,但编译器不要求您return Unit在函数末尾显式编写。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |