我很惊讶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.