尝试恢复获取与尝试匹配

时间:2018-08-28 19:51:32

标签: scala

为了捕获异常,我可以使用Try restore get:

Try(op) recover {
  case e: FooException => log; default
} get

编辑:或fold,如针对Scala 2.12+的注释中所述

或者我可以使用“尝试匹配”:

Try(op) match {
  case Success(v) => v
  case Failure(e: FooException) => log; default
  case Failure(e)=> throw e
}

两者之间有什么区别?哪一个更惯用?这是什么原因?有性能暗示吗?

1 个答案:

答案 0 :(得分:1)

match版本更好。有三种可能的结果(值,默认值,异常),而match版本对此很明确,而recover版本则比较模糊。 recover版本也有一个裸露的get,通常是一个不好的信号。 match的性能也可能会更好,尽管与Try(op)中的版本相比,这两个版本的成本都较小。