Я немного новичок в том, что Скала пробует это, когда читает Дэвида Поллака «Начать Скала».Он определяет простую рекурсивную функцию, которая загружает все строки из файла:
def allStrings(expr: => String): List[String] = expr match {
case null => Nil
case w => w :: allStrings(expr)
}
Это элегантно и потрясающе, за исключением того, что при попытке загрузить огромный файл словаря возникло исключение StackOverflow.* Теперь, насколько я понимаю, Scala поддерживает хвостовую рекурсию, поэтому вызов функции не может переполнить стек, возможно, компилятор его не распознает?Так что после некоторого поиска в Google я попытался написать аннотацию @tailrec, чтобы выручить компилятор, но он сказал:
error: could not optimize @tailrec annotated method: it contains a recursive call not in tail position
def allStrings(expr: => String): List[String] =
Я неправильно понимаю хвостовую рекурсию?Как мне исправить этот код?