“Scala 有函数和部分函数文字的语法。它看起来像这样”:
{
case pattern if guard => statements
case pattern => statements
}
Run Code Online (Sandbox Code Playgroud)
它是如何工作的,在什么情况下你可以创建一个带有括号{}而不是箭头的函数文字=>?
{ case pattern => value }
Run Code Online (Sandbox Code Playgroud)
相当于
x => x match { case pattern => value }
Run Code Online (Sandbox Code Playgroud)
并根据预期的类型变为PartialFunction或FunctionN。
例如,
val f: Int => String = { case x => "" }
Run Code Online (Sandbox Code Playgroud)
变成
val f: Int => String = (x: Int) => x match { case x => "" }
Run Code Online (Sandbox Code Playgroud)
这相当于
val f: Function1[Int, String] = new Function1[Int, String] {
def apply(x: Int): String = x match {
case x => ""
}
}
Run Code Online (Sandbox Code Playgroud)
因为预期的类型是 Int => String
同时
val f: PartialFunction[Int, String] = { case x => "" }
Run Code Online (Sandbox Code Playgroud)
变成
val f: PartialFunction[Int, String] = new PartialFunction[Int, String[] {
def apply(x: Int): String = x match {
case x => ""
}
def isDefinedAt(x: Int): Boolean = {
case x => true
case _ => false
}
}
Run Code Online (Sandbox Code Playgroud)
因为预期的类型是PartialFunction[Int, String].
因此,可以在根据预期类型接受相应扩展版本的任何地方使用带花括号的模式匹配匿名函数表达式。
作为旁注,请考虑 Scala 中的模式匹配匿名函数与数学中的分段函数定义之间的相似性
在数学中,分段定义函数(也称为分段函数、混合函数或按案例定义)是由多个子函数定义的函数,其中每个子函数适用于域中的不同区间。
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |