scala为什么允许从recoverWith返回
我很惊讶scala允许从scala为什么允许从recoverWith返回,scala,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]
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
notSome(-1)
为什么第二个示例在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?对我来说,第二个示例在scala 2.12.4I中生成:
Some(-1)
,在scala 2.12.5中也是如此。不知道recoverWith API代表什么。可能与2.12.4中修复的此问题有关。@XavierGuihot有趣的是,您提到的问题允许从collect函数中返回None
。scala是否允许从代码库的任何地方返回最终类型?如果这是真的,那就太疯狂了。那么,使用函数返回类型有什么意义呢?您总是从一个命名的方法,result
返回。这是非本地返回,即例外。
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 -version
Scala code runner version 2.12.3 -- Copyright 2002-2017, LAMP/EPFL and Lightbend, Inc.