使用方法作為函式值

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)

這行內函數值,可以增加簡單函式的清晰度。