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`.

Original source