为什么是Result.地图在Kotlin表现不同的单位类型?



我对以下两个Kotlin代码片段感到困惑:

:

val r: Result<Unit> = Result.success(Unit).map { Result.success(Unit) }

B:

val r: Result<Int> = Result.success(Unit).map { Result.success(1) }

代码段A可以编译,而代码段B不能编译。

谁能解释一下为什么代码段A可以和Kotlin类型系统一起工作?

您不应该从maplambda返回结果。你应该返回一个将被包装在Result中的值。这就是代码B失败的原因。只用map { 1 }就能成功。

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

相关内容

  • 没有找到相关文章

最新更新