簡單模式匹配
此示例顯示如何將輸入與多個值匹配:
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>
)的最佳函數語言程式設計實踐。請注意,如果缺少 案例 ,匹配 案例類 可以幫助編譯器生成警告。對於擴充套件密封特徵的使用者定義型別也是如此。如果匹配是總計,則可能不需要預設情況
也可以匹配未內聯定義的值。這些必須是穩定的識別符號,通過使用大寫名稱或附加反引號獲得。
將 One
和 two
定義在其他地方,或作為函式引數傳遞:
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"