Je suis un peu nouveau à la Scala de l'essayer lors de la lecture de Début de Scala par David Pollack. Il définit une simple fonction récursive qui charge toutes les chaînes de caractères dans le fichier:
def allStrings(expr: => String): List[String] = expr match {
case null => Nil
case w => w :: allStrings(expr)
}
Il est élégant et génial sauf qu'il avait jeté une StackOverflow exception lorsque j'ai essayé de charger un énorme fichier de dictionnaire.
Maintenant, comme je le comprends Scala prend en charge la queue de récursivité, de sorte que la fonction d'appel ne pouvait absolument pas de débordement de la pile, probablement compilateur de ne pas le reconnaître? Donc après quelques recherches sur google, j'ai essayé @tailrec annotation à l'aide du compilateur, mais il a dit
error: could not optimize @tailrec annotated method: it contains a recursive call not in tail position
def allStrings(expr: => String): List[String] =
Suis-je la compréhension de la queue de la récursivité de mal? Comment puis-je corriger ce code?