将 Either[A, B] 转换为 Option[A],其中 Left 变为 Some
Convert Either[A, B] to Option[A] where Left becomes Some
我想将一个 Either[A, B]
转换为一个选项,这样如果 Either
是 Left
就是 Some[A]
,如果是 Right
是None
.
到目前为止我想出了
either.swap.map(Some(_)).getOrElse(None)
有点啰嗦
和
either match {
case Left(value) => Some(value)
case Right(_) => None
}
这很好,但理想情况下我想知道是否有更惯用的方法使用方法而不是显式匹配。
将 Luis 的评论转换为我们得到的答案
either.swap.toOption
例如
val either: Either[String, Int] = Left("Boom")
either.toOption
either.swap.toOption
产出
res0: Option[Int] = None
res1: Option[String] = Some(Boom)
我们注意到 either.toOption
returns Option[Int]
而 either.swap.toOption
returns Option[String]
.
很抱歉复制了 Luis 的评论,但我认为它很有用,可以作为答案发布。
我想将一个 Either[A, B]
转换为一个选项,这样如果 Either
是 Left
就是 Some[A]
,如果是 Right
是None
.
到目前为止我想出了
either.swap.map(Some(_)).getOrElse(None)
有点啰嗦
和
either match {
case Left(value) => Some(value)
case Right(_) => None
}
这很好,但理想情况下我想知道是否有更惯用的方法使用方法而不是显式匹配。
将 Luis 的评论转换为我们得到的答案
either.swap.toOption
例如
val either: Either[String, Int] = Left("Boom")
either.toOption
either.swap.toOption
产出
res0: Option[Int] = None
res1: Option[String] = Some(Boom)
我们注意到 either.toOption
returns Option[Int]
而 either.swap.toOption
returns Option[String]
.
很抱歉复制了 Luis 的评论,但我认为它很有用,可以作为答案发布。