Scala使用方法作为函数值

示例

Scala编译器将自动将方法转换为函数值,以将其传递给高阶函数。

object MyObject {
  def mapMethod(input: Int): String = {
    int.toString
  }
}

Seq(1, 2, 3).map(MyObject.mapMethod) // Seq("1", "2", "3")

在上面的示例中,MyObject.mapMethod不是函数调用,而是map作为值传递给。实际上,map 需要传递给它的函数值,如其签名所示。对于签名map的List[A](类型的对象的列表A)是:

def map[B](f: (A) ⇒ B): List[B]

该f: (A) => B部分指示此方法调用的参数是某个函数,该函数采用类型A的对象并返回类型的对象B。A并且B是任意定义的。回到第一个示例,我们可以看到mapMethod接受一个Int(对应于A)并返回一个String(对应于B)。因此mapMethod是传递给的有效函数值map。我们可以这样重写相同的代码:

Seq(1, 2, 3).map(x:Int => int.toString)

这内联了函数值,可以增加简单函数的清晰度。