使用方法作为函数值
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]
的 map
(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)
这内联函数值,可以增加简单函数的清晰度。