Этот метод не может быть оптимизирован компилятором до al oop, поэтому он помещает данные в стек для каждого рекурсивного вызова. Вы всегда должны аннотировать методы, которые должны быть оптимизированы таким образом, чтобы убедиться, что это действительно происходит. Аннотируйте с помощью @annotation.tailrec
, чтобы убедиться, что компилятор действительно не использует стек для рекурсивных вызовов.
Чтобы исправить это, установите метод либо private
, либо final
.
@annotation.tailrec
final def parser(lex: List[Any], acc: Int, myTree: ListBuffer[Any]) ...
* 1008. *
Использование Any
здесь также вызывает беспокойство. Код не будет работать, если lex
не равен List[Tokens]
, так почему бы не указать это в сигнатуре функции? И myTree
выглядит как ListBuffer[Node]
.