47 votes

Existe-t-il un moyen plus propre de faire correspondre les modèles dans les fonctions anonymes Scala ?

Je me retrouve à écrire du code comme suit :

val b = a map (entry =>
    entry match {
        case ((x,y), u) => ((y,x), u)
    }
)

Je voudrais l'écrire différemment, si seulement cela fonctionnait :

val c = a map (((x,y) -> u) =>
    (y,x) -> u
)

Y a-t-il un moyen de me rapprocher de ça ?

68voto

sblundy Points 27163

Croyez-le ou non, cela fonctionne :

val b = List(1, 2)
b map {
  case 1 => "one"
  case 2 => "two"
}

Vous pouvez sauter le p => p match dans des cas simples. Cela devrait donc fonctionner :

val c = a map {
  case ((x,y) -> u) => (y,x) -> u
}

10voto

Kevin Wright Points 31665

Dans votre exemple cité, la solution la plus propre est :

val xs = List((1,2)->3,(4,5)->6,(7,8)->9)
xs map { case (a,b) => (a.swap, b) }

4voto

Daniel C. Sobral Points 159554
val b = a map { case ((x,y), u) => ((y,x), u) }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X