Comment dessiner des tableaux de correspondance dans Scala?

Ma définition de méthode se présente comme suit

def processLine(tokens: Array[Ssortingng]) = tokens match { // ... 

Supposons que je souhaite savoir si la deuxième chaîne est vide

 case "" == tokens(1) => println("empty") 

Ne comstack pas Comment vais-je faire ça?

Si vous souhaitez créer un motif sur le tableau pour déterminer si le second élément est la chaîne vide, vous pouvez effectuer les opérations suivantes:

 def processLine(tokens: Array[Ssortingng]) = tokens match { case Array(_, "", _*) => "second is empty" case _ => "default" } 

Le _* se lie à un nombre quelconque d’éléments dont aucun. Ceci est similaire au match suivant sur les listes, qui est probablement mieux connu:

 def processLine(tokens: List[Ssortingng]) = tokens match { case _ :: "" :: _ => "second is empty" case _ => "default" } 

La correspondance de motif peut ne pas être le bon choix pour votre exemple. Vous pouvez simplement faire:

 if( tokens(1) == "" ) { println("empty") } 

La correspondance de modèle est plus appropriée pour les cas tels que:

 for( t < - tokens ) t match { case "" => println( "Empty" ) case s => println( "Value: " + s ) } 

qui imprime quelque chose pour chaque jeton.

Edit: si vous voulez vérifier s’il existe un jeton qui est une chaîne vide, vous pouvez également essayer:

 if( tokens.exists( _ == "" ) ) { println("Found empty token") } 

Ce qui est super cool, c’est que vous pouvez utiliser un alias pour les choses correspondant à _* avec quelque chose comme

 val lines: List[Ssortingng] = List("Alice Bob Carol", "Bob Carol", "Carol Diane Alice") lines foreach { line => line split "\\s+" match { case Array(userName, friends@_*) => { /* Process user and his friends */ } } } 

déclaration de case ne fonctionne pas comme ça. Ça devrait être:

 case _ if "" == tokens(1) => println("empty")