и избежать необходимости внутреннего метода. Но это не всегда возможно, и это не может быть красиво вызвано из кода Java, если вы беспокоитесь о взаимодействии.

ного новичок в том, что Скала пробует это, когда читает Дэвида Поллака «Начать Скала». Он определяет простую рекурсивную функцию, которая загружает все строки из файла:

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] =

Я неправильно понимаю рекурсию хвоста? Как мне исправить этот код?

Ответы на вопрос(2)

Ваш ответ на вопрос