用作总函数
部分函数在惯用 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")