使用方法作為函式值
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)
這行內函數值,可以增加簡單函式的清晰度。