简单模式匹配

此示例显示如何将输入与多个值匹配:

def f(x: Int): String = x match {
  case 1 => "One"
  case 2 => "Two"
  case _ => "Unknown!"
}

f(2)  // "Two"
f(3)  // "Unknown!"

现场演示

注意:_直通默认情况,但不是必需的。

def g(x: Int): String = x match {
  case 1 => "One"
  case 2 => "Two"
}

g(1)  // "One"
g(3)  // throws a MatchError

为避免抛出异常,这是处理默认情况(case _ => <do something>)的最佳函数式编程实践。请注意,如果缺少 案例 ,匹配 案例类 可以帮助编译器生成警告。对于扩展密封特征的用户定义类型也是如此。如果匹配是总计,则可能不需要默认情况

也可以匹配未内联定义的值。这些必须是稳定的标识符,通过使用大写名称或附加反引号获得。

Onetwo 定义在其他地方,或作为函数参数传递:

val One: Int = 1
val two: Int = 2

可以通过以下方式匹配它们:

def g(x: Int): String = x match {
  case One => "One"
  case `two` => "Two"
}

与 Java 等其他编程语言不同的是,没有任何落伍。如果一个 case 块匹配一个输入,它将被执行并完成匹配。因此,最不具体的情况应该是最后一个案例块。

def f(x: Int): String = x match {
  case _ => "Default"
  case 1 => "One"
}

f(5) // "Default"
f(1) // "Default"