Given this Person
case class:
scala> case class Person(name: String, age: Int) {}
defined class Person
... and this instance
scala> val b = Person("Kevin", 100)
b: Person = Person(Kevin,100)
Is there a reason to prefer this code (with @
)
scala> b match {
| case p @ Person(_, age) => println("age")
| case _ => println("none")
| }
age
... over the following?
scala> b match {
| case Person(_, age) => println("age")
| case _ => println("none")
| }
age
Perhaps I'm missing the meaning/power of @
?
You only include the @
when you want to also deal with the object itself. Hence:
that match{
case p @ Person(_, age) if p != bill => age
case Person(_, age) => age - 15
case _ => println("Not a person")
}
Otherwise, there's no real point in including it.
Regarding the comments for the above answer.
Consider this case class.
case class Employee(name: String, id: Int, technology: String)
while doing pattern matching.
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**