J'ai le code suivant qui fonctionne de manière récursive sur chaque élément dans une Liste
def doMatch(list: List[Int]): Unit = list match {
case last :: Nil => println("Final element.")
case head :: tail => println("Recursing..."); doMatch(tail)
}
Maintenant, ignorant que cette fonctionnalité est disponible à travers le filtre() et foreach(), cela fonctionne bien. Cependant, si j'essaie de la modifier pour accepter toute Seq[Int], je rencontre des problèmes:
- Seq n'a pas ::, mais elle n'a +:, qui, comme je comprends, c'est fondamentalement la même chose. Si j'essaie de match sur la tête +: queue toutefois, le compilateur se plaint 'erreur: non trouvé: valeur +:'
- Nil est spécifique à la Liste, et je ne suis pas sûr de ce que pour le remplacer. Je vais essayer de Seq() si j'ai jamais passé le problème précédent
Voici comment je pense que le code devrait ressembler, sauf que ça ne fonctionne pas:
def doMatch(seq: Seq[Int]): Unit = seq match {
case last +: Seq() => println("Final element.")
case head +: tail => println("Recursing..."); doMatch(tail)
}
Edit: autant de bonnes réponses! Je l'accepte agilesteel de répondre comme sa a été le premier qui a noté que :: n'est pas un opérateur dans mon exemple, mais d'un cas de classe et donc de la différence.