В недавний ответ StackOverflow , я дал следующий рекурсивный код:
def retry[T](n: Int)(fn: => T): T = {
try {
fn
} catch {
case e if n > 1 =>
retry(n - 1)(fn)
}
}
Если я добавлю аннотацию @tailrec
, я получу:
Не удалось оптимизировать аннотированный @tailrec повторение метода: он содержит рекурсивный вызов не в хвостовой позиции.
Мне удалось взломать альтернативу с хвостовой рекурсией, но я все еще удивляюсь, почему она не оптимизировалась. Почему бы и нет?