Scala pattern matching referencing
pattern-matching, scala
Solution
Do this
v match {
case a @ A(x) =>
doSomething(a)
}
`@` is called Pattern Binder (Refer § 8.1.3). From the reference:
A pattern binder x@p consists of a pattern variable x and a pattern p. The type of the variable x is the static type T of the pattern p. This pattern matches any value v matched by the pattern p, provided the run-time type of v is also an instance of T , and it binds the variable name to that value.
Problem
When pattern matching case classes how do you actually refer to the class which it was matched to? Here's an example to show what I mean: ``` sealed trait Value case class A(n: Int) extends Value v match { case A(x) => doSomething(A); } ``` Where `v` is of type value and `doSomething` takes an parameter of type `A`, not `Value`.