Que fait l'opérateur @ de Scala?
Par exemple, dans le billet de blog Traitement du langage formel dans Scala, partie 2, il y a quelque chose comme ça
case x @ Some(Nil) => x
Que fait l'opérateur @ de Scala?
Par exemple, dans le billet de blog Traitement du langage formel dans Scala, partie 2, il y a quelque chose comme ça
case x @ Some(Nil) => x
Il permet de lier un modèle correspondant à une variable. Considérez ce qui suit, par exemple:
val o: Option[Int] = Some(2)
Vous pouvez facilement extraire le contenu:
o match {
case Some(x) => println(x)
case None =>
}
Mais si vous vouliez pas le contenu de Some
, mais l'option elle-même? Cela serait accompli avec ceci:
o match {
case x @ Some(_) => println(x)
case None =>
}
Notez qu'il @
peut être utilisé à n'importe quel niveau, pas seulement au niveau supérieur de l'appariement.
_*
). Mais peut-être que cela a été clarifié sur une version plus récente de la spécification.@
avecSome(_)
, mais plutôt si vous vouliez faire correspondre le contenu duSome
, mais vous référer toujours au Some lui-même, par exemplecase x @ Some(7) => println(x)
. Selon mon interprétation, ilcase x @ Some(_)
s'agit simplement d'une version plus détaillée decase x: Some
.case x: Some
ne fonctionne pas tout seul. Vous devez utilisercase x: Some[_]
, ce qui n'est pas moins verbeux@
peut être utilisé pour lier un nom à un modèle ou sous-modèle correspondant avec succès. Les modèles peuvent être utilisés dans la correspondance de modèles, le côté gauche de l'<-
entrée pour les compréhensions et dans les assigments de déstructuration.la source
Lorsque la correspondance de modèle
variable @ pattern
lie la variable à la valeur correspondante par modèle si le modèle correspond. Dans ce cas, cela signifie que la valeur dex
seraSome(Nil)
dans cette clause de cas.la source
Vous permet de faire correspondre le niveau supérieur d'un motif. Exemple:
la source
Il définit la valeur de
x
sur le modèle qui correspond. Dans votre exemple,x
serait doncSome(Nil)
(comme vous pourriez le déterminer à partir d'un appel à println )la source