Estoy confundido acerca de los siguientes dos fragmentos de código de Kotlin:
UN:
val r: Result<Unit> = Result.success(Unit).map { Result.success(Unit) }B:
val r: Result<Int> = Result.success(Unit).map { Result.success(1) }El fragmento A compila mientras que el fragmento B no compila.
¿Alguien puede explicar por qué el fragmento A funciona con el sistema de tipos de Kotlin?
Se supone que no debes devolver un resultado del map lambda. Se supone que debe devolver un valor que se incluirá en un resultado. Es por eso que su código B falla. Tendría éxito con solo map { 1 } .
El código A tiene éxito porque cuando Kotlin espera que una lambda devuelva Unit, implícitamente devuelve Unit independientemente de cuál sea la última línea de código en la lambda. Si no hiciera esto, cualquier lambda que no tenga valor de retorno tendría que terminar con una línea que diga Unidad. De la misma manera, cualquier función sin valor de retorno explícito tiene un tipo de retorno implícito de Unidad, pero el compilador no requiere que escriba explícitamente return Unit al final de sus funciones.