用作總函式

部分函式在慣用 Scala 中非常常見。它們通常用於方便的基於 case 的語法,以定義特徵上的總函式 :

sealed trait SuperType // `sealed` modifier allows inheritance within current build-unit only
case object A extends SuperType
case object B extends SuperType
case object C extends SuperType

val input: Seq[SuperType] = Seq(A, B, C)

input.map {
  case A => 5
  case _ => 10
} // Seq(5, 10, 10)

這樣可以在常規匿名函式中儲存 match 語句的附加語法。相比:

input.map { item => 
  item match {
    case A => 5
    case _ => 10
  }
} // Seq(5, 10, 10)

當元組或 case 類傳遞給函式時,它也經常用於使用模式匹配執行引數分解:

val input = Seq("A" -> 1, "B" -> 2, "C" -> 3)

input.map { case (a, i) =>
   a + i.toString
} // Seq("A1", "B2", "C3")