重要的问题是:如果 Either 是 会发生什么Left
。在此示例中,它是在靠近使用它的位置创建的,因此作为开发人员,这对您来说是显而易见的。但是对于编译器来说,里面的内容Either
可以是 anInt
或 a String
。
您可以使用例如 fold 提取值:
val x = test.fold({ 0 }, {it}) // provide 0 as default in case the Either was a `Left`
// x = 1
另一种选择是getOrElse
val test = 1.right()
val x = test.getOrElse { 42 } // again, default in case it was a `Left`
// x = 42
您也可以在不打开包装的情况下使用它:
val test = 1.right()
val testPlus10 = test.map { it + 10 } // adds 10 to `test` if it is `Right`, does nothing otherwise
val x = testPlus10.getOrElse { 0 } // unwrap by providing a default value
// x = 11
有关更多示例,请查看官方文档。
推荐阅读:如何从 Monad 中获取价值