将 Either[A, B] 转换为 Option[A],其中 Left 变为 Some

Convert Either[A, B] to Option[A] where Left becomes Some

我想将一个 Either[A, B] 转换为一个选项,这样如果 EitherLeft 就是 Some[A],如果是 RightNone.

到目前为止我想出了

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 的评论,但我认为它很有用,可以作为答案发布。