2
scala.util.Success
沒有apply
方法,但繼承了scala.util.Try
(AFAIK)中的方法。但所有scala.util.Try.apply
確實是撥打Success.apply
包圍try catch
塊。這是不是無限遞歸,這是如何觸發catch
塊?爲什麼scala.util.Success.apply無限遞歸?
scala.util.Success
沒有apply
方法,但繼承了scala.util.Try
(AFAIK)中的方法。但所有scala.util.Try.apply
確實是撥打Success.apply
包圍try catch
塊。這是不是無限遞歸,這是如何觸發catch
塊?爲什麼scala.util.Success.apply無限遞歸?
不,斯卡拉的Success
是案例類別,它繼承abstract class Try
。 因此,apply方法是由scala編譯器生成的一種內置方法,不會從對象Try
繼承。
來源https://github.com/scala/scala/blob/2.11.x/src/library/scala/util/Try.scala#L225
好吧,我看到參數Try.apply是一個函數,所以你正在評估它;但在Failure.apply的情況下,該參數是Throwable,我無法追蹤Throwable和Function之間的任何隱式轉換。特別是因爲Throwable實際上是java類,java.lang.Throwable。 –
'Try.apply'是按名稱函數調用的,如註釋所述。所以'Try(mayThrowException)'不會在'Try'之外被評估,而是在'Try'對象的'try Success(mayThrowException)'語句內,而'Sucess'是一個熱切評估參數的case類,'mayThrowExecption'得到作業在這裏完成。 –