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