object MatchDemo { /** * 定義偏函數用PartialFunction來表示 * PartialFunction[T1,T2]要求傳入一個參數T1,T2代表返回的類型。 * 偏函數體中的case只會執行一個,如果匹配到了就不會繼續往下匹配 */ val func: PartialFunction[String, Int] = { case "a" => 1 case "b" => 2 case _ => -1 } /** * 匹配字符串 */ def m1(str: String) = str match { case "a" => 1 case "b" => 2 case _ => -1 } /** * 匹配類型 */ def m2(x: Any) = x match { // 匹配字符串 case x: String => println(x) // 帶if守衛條件的匹配 case x: Int if x > 5 => println(x) case _ => println("unknonw") } /** * 匹配數組 */ def m3(arr: Array[Int]) = arr match { case Array(1, x, y) => println("匹配以1開頭,有三個元素的數組") case Array(0) => println("匹配只有0這個元素的數組") case Array(0, _*) => println("匹配以0開頭,任意多個元素的數組") case _ => ("unknown") } /** * 匹配序列 List */ def m4(list: List[Int]) = list match { case 5 :: Nil => println("匹配只有5這個元素的序列") case x :: y :: Nil => println("匹配只有兩個元素的序列") case x :: tail => println("匹配任意多個元素的序列") case _ => println("unknown") } /** * 匹配元組 */ def m5(tuple: Any) = tuple match { case (x, z, 7) => println("匹配有三個元素並且以7結尾的元組") case (2, x, y) => println("匹配以2開頭有三個元素的元組") case _ => println("unknown") } def main(args: Array[String]): Unit = { println(func("c")) println(m1("a")) m2(6) m3(Array(0, 1, 2, 3, 4, 5, 6)) m4(List(5, 6, 7)) } }