相关疑难解决方法(0)

如何转换选项[试试[_]]试试[选项[_]]?

我经常使用下面的函数转换Option[Try[_]]Try[Option[_]]但感觉不对.可以用更惯用的方式表达这样的功能吗?

def swap[T](optTry: Option[Try[T]]): Try[Option[T]] = {
  optTry match {
    case Some(Success(t)) => Success(Some(t))
    case Some(Failure(e)) => Failure(e)
    case None => Success(None)
  }
}
Run Code Online (Sandbox Code Playgroud)

说我有两个值:

val v1: Int = ???
val v2: Option[Int] = ???
Run Code Online (Sandbox Code Playgroud)

我想op对这些值进行操作(可能会失败)并将其传递给f下面的函数.

def op(x: Int): Try[String]
def f(x: String, y: Option[String]): Unit
Run Code Online (Sandbox Code Playgroud)

我通常用于理解可读性:

for {
  opedV1 <- op(v1)
  opedV2 <- swap(v2.map(op))
} f(opedV1, opedV2)
Run Code Online (Sandbox Code Playgroud)

PS.我想避免像scalaz这样沉重的东西.

scala optional traversable

7
推荐指数
2
解决办法
1576
查看次数

标签 统计

optional ×1

scala ×1

traversable ×1