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 @
?
The simplest and very common pattern matching character operators is the . This simply allows for any single character to match where a . is placed in a regular expression. For example /b.t/ can match to bat, bit, but or anything like bbt, bct .... Square brackets ( [..] )
Pattern matching in computer science is the checking and locating of specific sequences of data of some pattern among raw data or a sequence of tokens. Unlike pattern recognition, the match has to be exact in the case of pattern matching.
Pattern matching is a mechanism for checking a value against a pattern. A successful match can also deconstruct a value into its constituent parts. It is a more powerful version of the switch statement in Java and it can likewise be used in place of a series of if/else statements.
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**
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With