为什么scala允许从recoverWith返回

时间:2018-05-11 17:35:00

标签: scala

我很惊讶scala允许从Try.recoverWith返回。

示例,以下代码有意义,因为我正在使用Success

进行恢复
scala> import scala.util.{Try,Success}
import scala.util.{Try, Success}

scala> def result: Option[Int] = Try(0/0).recoverWith { case _ => Success(-1) }.toOption
result: Option[Int]

scala> result
res7: Option[Int] = Some(-1)

但是跟随代码返回对我来说没有任何意义。哪个甚至没有效果,因为toOption仍然返回None而不是Some(-1)

scala> def result: Option[Int] = Try(0/0).recoverWith { case _ => return Some(-1) }.toOption
result: Option[Int]

scala> result
res11: Option[Int] = None

为什么第二个例子甚至是scala中的有效代码?因为recoverWith的定义正在返回Try[U]

def recoverWith[U >: T](pf: PartialFunction[Throwable, Try[U]]): Try[U]

如果我删除toOption部分编译失败,则告知recoverWith和toOption之间存在某些内容。

scala> def f = Try(0/0).recoverWith { case _ => return Some(-1) }
<console>:13: error: method applyOrElse has return statement; needs result type
       def f = Try(0/0).recoverWith { case _ => return Some(-1) }
                                                ^

我正在使用scala 2.12.3

$ scala -version
Scala code runner version 2.12.3 -- Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.

0 个答案:

没有答案