【发布时间】:2012-01-04 04:59:22
【问题描述】:
在recent StackOverflow answer 中,我给出了以下递归代码:
def retry[T](n: Int)(fn: => T): T = {
try {
fn
} catch {
case e if n > 1 =>
retry(n - 1)(fn)
}
}
如果我添加 @tailrec 注释,我会得到:
无法优化 @tailrec 注释的方法重试:它包含一个 递归调用不在尾部位置。
我能够破解尾递归替代方案,但我仍然想知道为什么它没有优化。为什么不呢?
【问题讨论】:
-
如果 (n > 1) - 真的吗?不是 n > 0 或 n >= 1?如果 n == 1 (== 0) 会发生什么?
-
@user unknown - 显然你传入的是总尝试次数,而不是重试次数。
标签: scala try-catch tail-recursion