我想一个函数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'来包装函数调用,但我无法为你提供一个示例代码。 –