模式匹配基本介绍
Scala中的模式匹配类似于Java中的switch语法,但是更加强大。Scala模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。如果所有case都不匹配,那么会执行case _ 分支,类似于Java中default语句。
应用案例
/**
* @author huleikai
* @create 2019-05-24 14:15
*/
object TestMatch {
def main(args: Array[String]): Unit = {
val oper = '+'
val n1 = 20
val n2 = 10
var res = 0
oper match {
case '+' => res = n1 + n2
case '-' => res = n1 - n2
case '*' => res = n1 * n2
case '/' => res = n1 / n2
case _ => println("oper error")
}
println("res=" + res) //res=30
}
}
match的细节和注意事项
① 如果所有case都不匹配,那么会执行case _ 分支,类似于Java中default语句
② 如果所有case都不匹配,又没有写case _ 分支,那么会抛出MatchError
③ 每个case中,不用break语句,自动中断case
④ 可以在match中使用其它类型,而不仅仅是字符
⑤ => 等价于 java swtich 的 :
⑥ => 后面的代码块到下一个 case, 是作为一个整体执行,可以使用 {} 扩起来,也可以不扩
模式匹配Match守卫
如果想要表达匹配某个范围的数据,就需要在模式匹配中增加条件守卫。
应用案例
/**
* @author huleikai
* @create 2019-05-24 14:15
*/
object TestMatch {
def main(args: Array[String]): Unit = {
for (ch <- "+-3!") {
var sign = 0
var digit = 0
ch match {
case '+' => sign = 1
case '-' => sign = -1
//模式匹配守卫
case _ if ch.toString.equals("3") => digit = 3
case _ => sign = 2
}
println(ch + " " + sign + " " + digit)
}
}
}
模式匹配Match中的变量
如果在case关键字后跟变量名,那么match前表达式的值会赋给那个变量。
应用案例
/**
* @author huleikai
* @create 2019-05-24 14:15
*/
object TestMatch {
def main(args: Array[String]): Unit = {
val ch = 'V'
ch match {
case &