在scala中使用match表达式进行模式匹配,和其他语言中的switch语句的功能类型。但是match的功能更强大

我们先看一个简单的例子

object HelloPatternMatch {
  def main(args: Array[String]): Unit = {
    var data : Int = 1
    
    data match {
      case 1 => println("one")
      case 2 => println("two")
      case _ => println("others")
    }
  }
}

定义一个变量data,对data的值进行模式匹配。

case语句逐个的匹配data的值,命中了即执行=> 后的操作。 

case _ 代表 else选项 。 

每项case结束后,无需添加break语句。只要命中一个case,后续自动跳出匹配。如下:

scala>     val data : Int = 1
data: Int = 1
scala>
     |     data match {
     |       case 1 => println("one")
     |       case 1 => println("another_one")
     |       case 2 => println("two")
     |       case _ => println("others")
     |     }
<console>:15: warning: unreachable code
             case 1 => println("another_one")
                              ^
one

scala>

match 语句是一个表达式,表达式的返回值即是case的返回值。


我们看看如下的另一种写法

    val resutl = data match {
      case i if i ==1 => "one"
      case number if number ==2 => "two"
      case _ => "others"
    }


case 后面定义了一个常量 i 和 number 该常量在进行匹配的时候赋值。并且该常量可以再次引用。

例如

    "Spark! ".foreach { x => println(
        x match {
        case ' ' => "space"
        case ch => "Char:" + ch
        }
      )
    }