How does | (pipe) in pattern matching work?

| is not implemented in the library, it is interpreted by the Scala compiler. It builds a new pattern that is defined as the disjunction between two subpatterns that don’t bind any variable (although the newly formed pattern can itself be bound; i.e., you can write stuff like

try { /*...*/ }
catch {
  case e @ (_: IOException | _: IllegalArgumentException) => /*...*/
}

and e gets as type the most specific supertype of the listed alternatives).

Leave a Comment

tech