我有一些看起来像这样的代码:
data class MyStrings(val a: String, val b: String)
sealed class Error {
object SpecificError0 : Error()
object SpecificError1 : Error()
object SpecificError2 : Error()
}
fun either2(): Either<Error, String> =
Either.catch { throw RuntimeException("Either 2") }.mapLeft { Error.SpecificError2 }
fun either4(): Either<Error, MyStrings> =
Either.catch {
MyStrings(
a = "Hello",
b = either2().getOrElse { "" }
)
}.mapLeft { Error.SpecificError2 }
这将吞噬来自 any2() 的错误。
如果可能的话,我正在尝试找到一种方法从 any2 中抛出此错误。
我知道我可以做这样的事情:
fun either5(): Either<Error, MyStrings> =
either2()
.flatMap {
Either.Right(
MyStrings(
a = "Hello",
b = it
)
)
}
但是在我需要它之前调用它似乎很奇怪!
关于如何更改 any4() 的任何想法?抱歉,如果这是一个 n00b 问题,但我仍在尝试围绕函数式编程和 Arrow 进行思考。
谢谢你。