简单的函数文字可以写成
def add(x:Int)= x + 2
在上面的例子中我理解add是一个接受Int并给出Int的函数。它的类型是add:(x:Int)Int
非常清楚。
但下面的例子类型为Option [Int] =>内部有点不清楚
lazy val
在第二个例子中,任何人都可以解释为什么类型不应该
scala> def matchFunction : Option[Int] => Int = {
| case Some(x) => x
| case None => 0
| }
matchFunction: Option[Int] => Int
另外请解释上面的函数和下面的函数之间的区别,它使用类型透视的匹配
def matchFunction (x : Option[Int]) : Int
答案 0 :(得分:1)
基本上这是函数式编程方面之一:高阶函数 - 将其他函数作为参数或者其结果是函数的函数。 Option[Int] => Int
是一个匿名函数,它将Option[Int]
作为参数并返回Int
,匿名函数始终可以使用def
表示,def matchFunction(x : Option[Int]): Int = { ... }
只是另一个变体表达Option[Int] => Int = { ... }
。高阶函数可用于泛化,多态。因此,您可以将matchFunction
传递给以Option[Int] => Int
函数作为参数的函数。 List(Some(1), None, Some(2)).map(matchFunction)
将为您提供List(1, 0, 2)
。
https://www.scala-exercises.org/scala_tutorial/higher_order_functions