簡單模式匹配

此示例顯示如何將輸入與多個值匹配:

def f(x: Int): String = x match {
  case 1 => "One"
  case 2 => "Two"
  case _ => "Unknown!"
}

f(2)  // "Two"
f(3)  // "Unknown!"

現場演示

注意:_直通預設情況,但不是必需的。

def g(x: Int): String = x match {
  case 1 => "One"
  case 2 => "Two"
}

g(1)  // "One"
g(3)  // throws a MatchError

為避免丟擲異常,這是處理預設情況(case _ => <do something>)的最佳函數語言程式設計實踐。請注意,如果缺少 案例 ,匹配 案例類 可以幫助編譯器生成警告。對於擴充套件密封特徵的使用者定義型別也是如此。如果匹配是總計,則可能不需要預設情況

也可以匹配未內聯定義的值。這些必須是穩定的識別符號,通過使用大寫名稱或附加反引號獲得。

Onetwo 定義在其他地方,或作為函式引數傳遞:

val One: Int = 1
val two: Int = 2

可以通過以下方式匹配它們:

def g(x: Int): String = x match {
  case One => "One"
  case `two` => "Two"
}

與 Java 等其他程式語言不同的是,沒有任何落伍。如果一個 case 塊匹配一個輸入,它將被執行並完成匹配。因此,最不具體的情況應該是最後一個案例塊。

def f(x: Int): String = x match {
  case _ => "Default"
  case 1 => "One"
}

f(5) // "Default"
f(1) // "Default"