使用方法作为函数值

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 需要传递给它的函数值,这可以在它的签名中看到。List[A]mapA 类型的对象列表)的签名是:

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

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

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

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