Почему выиграл? • компилятор Scala применяет оптимизацию хвостового вызова, если метод не является окончательным?

Почему компилятор Scala не применяет оптимизацию хвостового вызова, если метод является окончательным?

Например, это:

class C {
    @tailrec def fact(n: Int, result: Int): Int =
        if(n == 0)
            result
        else
            fact(n - 1, n * result)
}

приводит к ошибке

: не удалось оптимизировать аннотированный метод @tailrec: он не является ни частным, ни окончательным, поэтому его можно переопределить

Что именно пойдет не так, если компилятор применил TCO в таком случае?

45
задан Peter Mortensen 2 May 2013 в 16:50
поделиться