comme une question similaire: Convertir l'instruction de correspondance en fonction partielle lorsque foreach est utilisé . De même, IntelliJ me demande d'améliorer mon code. La différence est que j'utilise des valeurs pour l'appariement:
val matchMe = "Foo"
keys.foreach(key =>
key match {
case `matchMe` => somethingSpecial()
case _ => somethingNormal(key, calcWith(key))
})
Refactoriser cela en une fonction de correspondance de modèle anonyme ressemblerait à ceci:
keys.foreach {
case `matchMe` => somethingSpecial(_)
case _ => somethingNormal(_, calcWith(_)) //this doesn't work
}
Notez que dans le deuxième cas, je ne peux pas utiliser _
puisque j'en ai besoin deux fois. Existe-t-il un moyen d'utiliser une fonction de correspondance de modèle anonyme ici?
Vous ne pouvez pas utiliser le caractère générique _
Ici, son but est d'indiquer que vous ne vous souciez pas de la valeur à laquelle vous correspondez.
Vous pouvez utiliser un paramètre nommé:
keys.foreach {
case `matchMe` => somethingSpecial(matchMe)
case nonSpecialKey => somethingNormal(nonSpecialKey, calcWith(nonSpecialKey))
}
Sans aucune restriction, il correspondra à n'importe quelle valeur. Notez que l'ordre des case
s est important, car case x => ...
Correspond à tout et raccourcira essentiellement les autres instructions case
.
En passant, je ne pense pas que votre somethingSpecial(_)
fait ce que vous voulez/attendez d'elle. Ce n'est qu'une version courte de x => somethingSpecial(x)
, pas somethingSpecial(matchMe)
.