Symbole de concordance `@` Symbole

Compte tenu de cette classe de cas Person :

 scala> case class Person(name: Ssortingng, age: Int) {} defined class Person 

… et cette instance

 scala> val b = Person("Kevin", 100) b: Person = Person(Kevin,100) 

Y a-t-il une raison de préférer ce code (avec @ )

 scala> b match { | case p @ Person(_, age) => println("age") | case _ => println("none") | } age 

… sur ce qui suit?

 scala> b match { | case Person(_, age) => println("age") | case _ => println("none") | } age 

Peut-être que je manque le sens / pouvoir de @ ?

Vous n’incluez que le @ lorsque vous souhaitez traiter également l’object lui-même. Par conséquent:

 that match{ case p @ Person(_, age) if p != bill => age case Person(_, age) => age - 15 case _ => println("Not a person") } 

Sinon, il n’y a pas de réel intérêt à l’inclure.

En ce qui concerne les commentaires pour la réponse ci-dessus.

Considérez cette classe de cas.

 case class Employee(name: Ssortingng, id: Int, technology: Ssortingng) 

tout en faisant la correspondance de motif.

 case e @ Employee(_, _, "scala") => e.name // matching for employees with only scala technology ... it works case x: Employee => x.name // It also works case e: Employee(_, _, "scala") => e.name // matching for employees with only scala technology ... **wont't work**