模式匹配
1、如果所有case都不匹配那么会执行case _ 分支,类似于java中的defaul语句,若此时没有case _ 分支,那么会抛出MatchError。
2、每一个case中,不需要使用break语句,自动断开case。
3、match case 语句可以匹配任何类型,而不是字面量。
4、 => 后面的代码块,直到下一个case语句之前的代码是作为一个整体执行,可以使用{}括起来,也可以不括。
1 object Test1_PatternMat { 2 def main(args: Array[String]): Unit = { 3 //1、基本的定义语法 4 val x: Int = 2 5 val y: String = x match { 6 case 1 => "one" 7 case 2 => "two" 8 case 3 => "three" 9 case _ => "other" 10 } 11 println(y) 12 13 //2、示例:用模式匹配实现简单二元运算 14 val a = 25 15 val b = 12 16 17 def matchDualOp(op: Char) = op match { 18 case '+' => a + b 19 case '-' => a - b 20 case '*' => a * b 21 case '/' => a / b 22 case _ => "非法运算符" 23 } 24 25 println(matchDualOp('+')) 26 println(matchDualOp('/')) 27 println("--------------------------") 28 29 //3、模式守卫 30 //求一个整数的绝对值 31 def abs(num:Int) = { 32 num match { 33 case i if i >= 0 => i 34 case i if i < 0 => -i 35 } 36 } 37 println(abs(9)) 38 println(abs(-1)) 39 40 41 } 42 }