了解函数的scala类型

时间:2017-11-18 11:30:29

标签: scala

简单的函数文字可以写成

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

1 个答案:

答案 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