1. 函數字面量html
在 Scala 基礎(3)—— 基礎類型和基礎操做 中提到了函數字面量,這裏具體解釋函數字面量的語法。java
下面展現一個具體的函數字面量,它由三部分組成:數組
(x: Int, y: Int) => x + y
2. 一等函數函數
一等函數能夠說是 Scala 中很是重要的特性。post
所謂一等函數,就是使用函數字面量,將其做爲值進行傳遞。優化
函數字面量會被編譯成類,而且在運行時實例化成函數值,作一個簡單的類比:url
一等函數在 Scala 的代碼中被普遍的應用,例如集成在集合類中的 foreach 和 filter 方法。spa
foreach 被用來遍歷集合,相比於 for 表達式,這是一種更加偏向於函數式表達的語法:htm
def main(args: Array[String]): Unit = { val list = List(1, 2, 3) list.foreach((x: Int) => println(x)) }
foreach 方法的入參就是一個函數字面量,其類型是 Int => Unit對象
filter 被用來篩選出集合中知足指定條件的元素:
def main(args: Array[String]): Unit = { val list = List(1, 2, 3) list.filter((x: Int) => x > 0) }
filter 方法的參數類型是 Int => Boolean
3. 簡寫函數字面量
在上述 filter 的例子中,函數字面量的寫法其實能夠進一步優化。
list.filter((x: Int) => x > 0)
首先,編譯器知道 x 一定是整數,由於這是一個過濾一個由整數組成的列表。咱們稱 Int 爲目標類型(target typing)。
所以,能夠依靠類型推斷來略去參數類型的聲明:
list.filter((x) => x > 0)
其次,這個類型推斷參數兩側的括號也能夠省去:
list.filter(x => x > 0)