【发布时间】:2015-10-08 13:22:18
【问题描述】:
scala.util.Success 没有apply 方法,但从scala.util.Try (AFAIK) 继承了该方法。但是scala.util.Try.apply 所做的只是调用Success.apply 并被try catch 块包围。这怎么不是无限递归的?这怎么会触发catch 块?
【问题讨论】:
-
好的,我看到 Try.apply 的参数是一个函数,因此您正在评估它;但在 Failure.apply 的情况下,参数是 Throwable,我无法追踪 Throwable 和 Function 之间的任何隐式转换。特别是 Throwable 实际上是 java 类,java.lang.Throwable。
-
Try.apply是按名称调用的函数,如评论所述。所以Try(mayThrowException)不会在Try之外进行评估,而是在Try对象内部的try Success(mayThrowException)语句内部进行评估,而Sucess是一个热切评估参数的案例类,mayThrowExecption在这里完成工作。