似乎Try
没有表现出我能够捕捉异常的类型的行为。我看了at the source code,但仍然不知道它是如何工作的。
是否使用了一些我不熟悉的Scala功能,或者是否由编译器专门处理?
答案 0 :(得分:7)
这里没什么特别的。查看apply
方法:
def apply[T](r: => T): Try[T] =
try Success(r) catch {
case NonFatal(e) => Failure(e)
}
它只是通过尝试返回try
来包裹catch
/ Success(r)
,如果失败,则会返回Failure(e)
。
答案 1 :(得分:1)
一切都在那里:
https://github.com/scala/scala/blob/2.11.x/src/library/scala/util/Try.scala#L192
def apply[T](r: => T): Try[T] =
try Success(r) catch {
case NonFatal(e) => Failure(e)
}
答案 2 :(得分:0)
import scala.util._
import scala.util.control.NonFatal
接下来的3行将在apply
对象上使用相同的scala.util.Try
方法:
val res = Try.apply(throw new Exception)
val res2 = Try(throw new Exception)
val res3 = Try { throw new Exception }
具有以下定义:
def apply[T](r: => T): Try[T] =
try Success(r) catch {
case NonFatal(e) => Failure(e)
}
apply
方法使用ByName参数r
定义,即
仅在使用时评估。在我们的例子中,它将在try
块中使用
为Success(r)
。 apply
方法。