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

This is an excerpt from the Scala Cookbook (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 ...