How to access the value of the default case in a Scala match expression

This is an excerpt from the Scala Cookbook (#ad) (partially modified for the internet). This is one of the shorter recipes, Recipe 3.10, “How to access the value of the default case in a Scala match expression.”

Problem

You want to access the value of the default, “catch all” case when using a Scala match expression, but you can’t access the value when you match it with the _ wildcard syntax.

Solution

Instead of using the _ wildcard character, assign a variable name to the default case:

i match {
    case 0 => println("1")
    case 1 => println("2")
    case default => println("You gave me: " + default)
}

By giving the default match a variable name, you can access the variable on the right side of the statement.

Discussion

The key to this recipe is in using a variable name for the default match instead of the usual _ wildcard character.

The name you assign can be any legal variable name, so instead of naming it default, you can name it something else, such as whoa:

i match {
    case 0 => println("1")
    case 1 => println("2")
    case whoa => println("You gave me: " + whoa)
}

It’s important to provide a default match. Failure to do so can cause a MatchError:

scala> 3 match {
     |     case 1 => println("one")
     |     case 2 => println("two")
     |     // no default match
     | }
scala.MatchError: 3 (of class java.lang.Integer)
many more lines of output ...