这个问题与this question相反。

val x = Some((1, 2))
val (y: Option[Int], z: Option[Int]) = ???

纯粹的Scala答案和Scalaz答案都是有帮助的。

最佳答案

我实际上认为您的答案很清楚,但是由于您提到了Scalaz,因此此操作称为unzip

scala> import scalaz._, std.option._
import scalaz._
import std.option._

scala> val x: Option[(Int, Int)] = Some((1, 2))
x: Option[(Int, Int)] = Some((1,2))

scala> Unzip[Option].unzip(x)
res0: (Option[Int], Option[Int]) = (Some(1),Some(2))


您应该能够简单地编写x.unzip,但是不幸的是,标准库从OptionIterable的可怕的隐式转换将首先出现,最后得到(Iterable[Int], Iterable[Int])



一年后回头:实际上可以使用Scalaz的UnzipPairOps来做到这一点:

scala> import scalaz.std.option._, scalaz.syntax.unzip._
import scalaz.std.option._
import scalaz.syntax.unzip._

scala> val x: Option[(Int, Int)] = Some((1, 2))
x: Option[(Int, Int)] = Some((1,2))

scala> x.unfzip
res0: (Option[Int], Option[Int]) = (Some(1),Some(2))


你在想什么,2014年我?

关于scala - 如何在Scala中将选项元组转换为选项元组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21463002/

10-08 22:10