我想一個函數f
適用於List
的每個元素,並在第一個錯誤不會停止,但是隻能扔過去的錯誤(如果有的話):斯卡拉尾遞歸從finally塊
@annotation.tailrec
def tryAll[A](xs: List[A])(f: A => Unit): Unit = {
xs match {
case x :: xt =>
try {
f(x)
} finally {
tryAll(xt)(f)
}
case _ =>
}
}
但是,在上面的代碼不會編譯 - 它抱怨這個函數不是尾遞歸的。爲什麼不?
功能是不是尾遞歸,因爲在案件的異常被拋出,'finally'塊未得到執行的最後一個代碼。 –
@HristoIliev:我明白了 - 我怎樣才能以高效和慣用的方式來寫這些呢? – pathikrit
我相信習慣的方法是使用'scala.util.Try'來包裝函數調用,但我無法爲你提供一個示例代碼。 –