简单模式匹配
此示例显示如何将输入与多个值匹配:
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>
)的最佳函数式编程实践。请注意,如果缺少 案例 ,匹配 案例类 可以帮助编译器生成警告。对于扩展密封特征的用户定义类型也是如此。如果匹配是总计,则可能不需要默认情况
也可以匹配未内联定义的值。这些必须是稳定的标识符,通过使用大写名称或附加反引号获得。
将 One
和 two
定义在其他地方,或作为函数参数传递:
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"