为了捕获异常,我可以使用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
}
两者之间有什么区别?哪一个更惯用?这是什么原因?有性能暗示吗?
答案 0 :(得分:1)
match
版本更好。有三种可能的结果(值,默认值,异常),而match
版本对此很明确,而recover
版本则比较模糊。 recover
版本也有一个裸露的get
,通常是一个不好的信号。 match
的性能也可能会更好,尽管与Try(op)
中的版本相比,这两个版本的成本都较小。