如何解决了解用大括号创建的函数文字是如何工作的
Quoting from this answer to a different question
“Scala 有函数和部分函数文字的语法。它看起来像这样”:
{
case pattern if guard => statements
case pattern => statements
}
它是如何工作的,在什么情况下你可以用大括号 {}
而不是箭头 =>
创建函数文字?
解决方法
Pattern Matching Anonymous Function
{ case pattern => value }
相当于
x => x match { case pattern => value }
并根据预期的类型变为 PartialFunction
或 FunctionN
。
例如
val f: Int => String = { case x => "" }
变成
val f: Int => String = (x: Int) => x match { case x => "" }
相当于
val f: Function1[Int,String] = new Function1[Int,String] {
def apply(x: Int): String = x match {
case x => ""
}
}
因为预期的类型是 Int => String
虽然
val f: PartialFunction[Int,String] = { case x => "" }
变成
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
}
}
因为预期的类型是 PartialFunction[Int,String]
。
因此,可以在根据预期类型接受相应扩展版本的任何地方使用带花括号的模式匹配匿名函数表达式。
作为旁注,考虑 Scala 中模式匹配匿名函数和数学中 piecewise 函数定义之间的相似性
在数学中,分段定义的函数(也称为分段函数) 函数、混合函数或案例定义)是一个函数 由多个子功能定义,其中每个子功能适用于 域中的不同区间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。