为什么 Kotlin 中的 Result.map 对于单位类型的行为有所不同?

Yve*_*our 4 kotlin

我对以下两个 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 类型系统吗?

Ten*_*r04 6

您不应该从 lambda 返回结果map。您应该返回一个包含在结果中的值。这就是你的代码 B 失败的原因。只需要 就可以成功map { 1 }

代码 A 成功,因为当 Kotlin 期望 lambda 返回 Unit 时,无论 lambda 中的最后一行代码是什么,它都会隐式返回 Unit。如果不这样做,任何没有返回值的 lambda 都必须以显示 Unit 的行结束。同样,任何没有显式返回值的函数都具有隐式返回类型 Unit,但编译器不要求您return Unit在函数末尾显式编写。