Lorsque vous rencontrez à nouveau la correspondance des listes, vous pouvez utiliser NIL pour vérifier la liste de vide. Cependant, si le type sous-jacent est un iérien, vous pouvez toujours vérifier nul, et il se cassera pour des ensembles vides, etc ... Voir la suite suivante Session:
scala> val l: Iterable[Int] = List()
l: Iterable[Int] = List()
scala> l match {
| case Nil => 1
| case _ => 2
| }
res0: Int = 1
scala> val l: Iterable[Int] = Set()
l: Iterable[Int] = Set()
scala> l match {
| case Nil => 1
| case _ => 2
| }
res2: Int = 2
3 Réponses :
Une possibilité est d'utiliser une protection: Une autre façon de le faire consiste à utiliser une expression IF-else (fonctionne mieux si vous n'avez qu'une ou deux conditions de contrôle) : p>
Le si sinon est comme ça que j'ai fini par faire. Semble juste pas comme idiomatique.
IMHO la meilleure façon pour les collections correspondantes de motif
Convertissez le scrutateur en une liste pour éliminer le doute.
l.toList match {
case Nil => 1
case xs => 2
}
Ouais. .toseq code> est également suffisant. (Vector (): SEQ [INT]) Match {cas nil => 0} code>.
Mais cela repose uniquement sur le fait que nil.equals code> est remplacé afin que nil code> soit égal à n'importe quel SEQ vide. Ceci est sans papiers, donc je ne fierais pas dessus (tellement mieux utiliser tolist code> sur toseq code> comme dans votre réponse, cela implique moins de magie).
Voici une autre option (jeu de mots):
scala> val l: Iterable[Int] = List()
l: Iterable[Int] = List()
scala> l.headOption match { case None => 1; case Some(h) => 2 }
res0: Int = 1
Le sous-typing est une épée à double tranchant; utiliser avec soin.