I (inadvertently) came across a bit of pattern matching syntax I did not expect to compile and now cannot figure out.
It appears related to unapplySeq.
Note the case x List(_,_) part in this simple example:
val xs = List(1, 2, 3) //> xs : List[Int] = List(1, 2, 3)
xs match {
case x List (_, _) => "yes"
case _ => "no"
} //> res0: String = yes
I am used to : or @ in pattern match syntax, but am confused about this. How does this syntax work and what (if any) is its relationship to unapplySeq?
Sample code executed in Scala 2.11.6
The equivalent non-infix version is:
xs match {
case List(x, _, _) => "yes"
case _ => "no"
}
Scala specification says:
An infix operation pattern p;op;q is a shorthand for the constructor or extractor pattern op(p,q). The precedence and associativity of operators in patterns is the same as in expressions.
An infix operation pattern p;op;(q1,…,qn) is a shorthand for the constructor or extractor pattern op(p,q1,…,qn).
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