
- Scala 教程
- Scala - 首頁
- Scala - 概述
- Scala - 特性
- Scala - 環境設定
- Scala - 構建工具 (SBT)
- Scala - 基本語法
- 資料型別和變數
- Scala - 資料型別
- Scala - 變數
- Scala - 字串
- Scala - 陣列
- Scala 運算子
- Scala - 運算子
- Scala - 算術運算子
- Scala - 關係運算符
- Scala - 邏輯運算子
- Scala - 位運算子
- Scala - 賦值運算子
- Scala 條件語句
- Scala - IF ELSE
- Scala 迴圈語句
- Scala - 迴圈語句
- Scala - while 迴圈
- Scala - do-while 迴圈
- Scala - for 迴圈
- Scala - break 語句
- Scala 類和物件
- Scala - 類和物件
- Scala - 訪問修飾符
- Scala 方法和函式
- Scala - 函式
- Scala - 函式按名稱呼叫
- Scala - 帶命名引數的函式
- Scala - 帶可變引數的函式
- Scala - 遞迴函式
- Scala - 預設引數值
- Scala - 高階函式
- Scala - 巢狀函式
- Scala - 匿名函式
- 部分應用函式
- Scala - 柯里化函式
- Scala 集合
- Scala - 集合
- Scala - 列表
- Scala - 集合
- Scala - 對映
- Scala - 元組
- Scala - 迭代器
- Scala - 選項
- Scala 模式匹配
- Scala - 模式匹配
- Scala - 異常處理
- Scala - 提取器
- Scala - 正則表示式
- Scala 檔案 I/O
- Scala - 檔案 I/O
- Scala 高階概念
- Scala - 閉包
- Scala - 特質
- Scala 有用資源
- Scala - 快速指南
- Scala - 線上編譯器
- Scala - 有用資源
- Scala - 討論
Scala - 模式匹配
模式匹配是 Scala 中僅次於函式值和閉包的第二大常用特性。Scala 在處理訊息時提供了對模式匹配的大力支援。
模式匹配包括一系列備選方案,每個備選方案都以關鍵字case開頭。每個備選方案都包含一個模式和一個或多個表示式,如果模式匹配,則將評估這些表示式。箭頭符號=>將模式與表示式分隔開。
嘗試以下示例程式,該程式演示瞭如何針對整數值進行匹配。
示例
object Demo { def main(args: Array[String]) { println(matchTest(3)) } def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" } }
將上述程式儲存在Demo.scala中。以下命令用於編譯和執行此程式。
命令
\>scalac Demo.scala \>scala Demo
輸出
many
包含 case 語句的塊定義了一個函式,該函式將整數對映到字串。match 關鍵字提供了一種方便的方法來將函式(如上面的模式匹配函式)應用於物件。
嘗試以下示例程式,該程式將值與不同型別的模式進行匹配。
示例
object Demo { def main(args: Array[String]) { println(matchTest("two")) println(matchTest("test")) println(matchTest(1)) } def matchTest(x: Any): Any = x match { case 1 => "one" case "two" => 2 case y: Int => "scala.Int" case _ => "many" } }
將上述程式儲存在Demo.scala中。以下命令用於編譯和執行此程式。
命令
\>scalac Demo.scala \>scala Demo
輸出
2 many one
使用 Case 類進行匹配
Case 類是在模式匹配中與 case 表示式一起使用的特殊類。在語法上,它們是帶有特殊修飾符的標準類:case。
嘗試以下示例,這是一個使用 case 類的簡單模式匹配示例。
示例
object Demo { def main(args: Array[String]) { val alice = new Person("Alice", 25) val bob = new Person("Bob", 32) val charlie = new Person("Charlie", 32) for (person <- List(alice, bob, charlie)) { person match { case Person("Alice", 25) => println("Hi Alice!") case Person("Bob", 32) => println("Hi Bob!") case Person(name, age) => println( "Age: " + age + " year, name: " + name + "?") } } } case class Person(name: String, age: Int) }
將上述程式儲存在Demo.scala中。以下命令用於編譯和執行此程式。
命令
\>scalac Demo.scala \>scala Demo
輸出
Hi Alice! Hi Bob! Age: 32 year, name: Charlie?
新增 case 關鍵字會導致編譯器自動新增許多有用的功能。該關鍵字表示與模式匹配中的 case 表示式相關聯。
首先,編譯器會自動將建構函式引數轉換為不可變欄位 (vals)。val 關鍵字是可選的。如果需要可變欄位,請使用 var 關鍵字。因此,我們的建構函式引數列表現在更短了。
其次,編譯器會自動為類實現equals、hashCode和toString方法,這些方法使用指定為建構函式引數的欄位。因此,我們不再需要自己的 toString() 方法。
最後,Person類的主體也變為空,因為沒有我們需要定義的方法!
廣告