Scala 基礎(7) 函式字面量和一等函式

2022-06-05 16:03:07 字數 1000 閱讀 7996

1. 函式字面量

在 scala 基礎(3)—— 基礎型別和基礎操作 中提到了函式字面量,這裡具體解釋函式字面量的語法。

下面展示乙個具體的函式字面量,它由三部分組成:

(x: int, y: int) => x + y

2. 一等函式

一等函式可以說是 scala 中非常重要的特性。

所謂一等函式,就是使用函式字面量,將其作為值進行傳遞。

函式字面量會被編譯成類,並且在執行時例項化成函式值,做乙個簡單的模擬:

一等函式在 scala 的**中被廣泛的應用,例如整合在集合類中的 foreach 和 filter 方法。

foreach 被用來遍歷集合,相比於 for 表示式,這是一種更加偏向於函式式表達的語法:

def main(args: array[string]): unit =

foreach 方法的入參就是乙個函式字面量,其型別是 int => unit

filter 被用來篩選出集合中滿足指定條件的元素:

def main(args: array[string]): unit =

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)

Scala函式字面量

scala中函式為頭等公民,你不僅可以定義乙個函式然後呼叫它,而且你可以寫乙個未命名的函式字面量,然後可以把它當成乙個值傳遞到其它函式或是賦值給其它變數。下面的例子為乙個簡單的函式字面量 參考整數字面量,3 為一整數字面量 x int x 1這是個函式字面量,它的功能為 1.符好 表示這個函式將符號...

Scala函式字面量簡化寫法

scala提供了多種方法來簡化函式字面量中多餘的部分,比如前面例子中filter方法中使用的函式字面量,完整的寫法如下 x int x 1首先可以省略到引數的型別,scala可以根據上下文推算出引數的型別,函式定義可以簡化為 x x 1這個函式可以進一步去掉引數的括號,這裡的括號不起什麼作用 x x...

字面量和整數字面量

字面量是指c c 源 中直接使用的常量,字面量的意思是 一眼看上去是什麼就是什麼 例如語句 int x 10 中10就是字面量,它相對於變數,只有乙個確定的值不能改變,這個值就是它看上去的值。c c 中的字面量有一下幾種 1.0和正整數,如10 123等 負整數不是字面量,因為加了 運算子 2.浮點...