概念

如果想要表达匹配某个范围的数据,就需要在模式匹配中增加条件守卫。


基本案例

  1. def main(args: Array[String]): Unit = {
  2. val a = 10
  3. val b = 20
  4. val op = StdIn.readLine("请输入一个运算符: ")
  5. op match {
  6. case "+" =>
  7. println(a + b)
  8. case "-" =>
  9. println(a - b)
  10. case "*" =>
  11. println(a * b)
  12. case "/" =>
  13. println(a / b)
  14. //需要注意的是这个需要写在最一个case分支.
  15. case _ => println("你的运算符输入的不对!")
  16. }
  17. }

如果都匹配不上的话就走 case _ => println(“你的运算符输入的不对!”) 分支.

case _ 的含义

其实case _ 就是匹配任意的值,一般可以用来默认值.

下面main函数的意思是如果Ba等于a的话就输出a的值,否则就输出 “不等于” .

  def main(args: Array[String]): Unit = {
    val Ba = 25
    val a = 20
    a match {
      case Ba => println(a)
      case _ => println("不等于")
    }
  }

执行main函数的结果

不等于

模式匹配的返回值

任何的语法结构都有值! 模式匹配也也有值, 他的值就是匹配成功的那个case的最后一行代码的值

  def main(args: Array[String]): Unit = {
    val a = 10
    val b = 20
    val op = StdIn.readLine("请输入一个运算符: ")
    val r = op match {
      case "+" =>
        a + b
      case "-" =>
        a - b
      case "*" =>
        a * b
      case "/" =>
        a / b
      case _ => -1
    }
    println(r) 
  }

执行main函数之后:输出,

请输入一个运算符: +
30

为什么返回是30,因为我输入了 “+”,a和b的值相加就是30,然后这个case值返回 回来就是30,所以r就是30

如果随便输入的话,就返回的 -1

请输入一个运算符: asda
-1