1. 程式人生 > >Scala高階函式

Scala高階函式

概念:如果一個函式的傳入引數為函式或者返回值是函式,則該函式即為高階函式。

3.7.1. 匿名函式的定義和案例

1、匿名函式定義:

(x: Int) => x + 1
  1. 匿名函式說明(一般作為引數值傳遞):

 

3.7.2. 函式作為引數[1] 

第一步:定義帶函式型別引數的函式f2

第二步:定義函式f3(一般定義匿名函式),作為f2的引數值

第三步:呼叫f2,將f3作為f2的引數值,傳遞

3.7.3. 返回值為函式

需求:根據引數為true或false,返回轉換大寫或小寫的函式)

 

3.7.4. 一些簡單預定義高階函式舉例

A)、map函式的用法

B)、filter函式的用法

C)、foreach函式的用法

注意:map函式對陣列中每個元素操作,返回一個新的陣列

      filter函式對陣列中每個元素進行判斷,過濾掉返回false資料

      foreach 函式對函式中的每個元素進行操作。

3.7.5. 引數的型別推斷(函式作為引數傳遞)

當將一個匿名函式傳遞給另一個函式或方法時,scala會盡可能幫你推斷出型別資訊。

案例需求:

  1. 要遍歷陣列中的資料,標準語法如下:

 

b、接著將語法變型:你可以省略掉x的型別(自動推斷)

c、接著將語法變型:對於只有一個引數的函式,你還可以省略掉()

d、接著將語法變型:如果引數在=>右側只出現一次,你還可以寫成下面這種形式

注意:1、_代表萬用字元,代表任意元素。此處代表集合中的元素

      2、_放入print()方法時候,導致無法推斷_元素型別,就會報錯

     

f、接著將語法變型:當然你一定可以將{}去掉的

 

注意:scala語法格式寫法非常靈活,以後寫程式碼可以多嘗試幾種寫法,但一定要註釋明確

3.7.6. 閉包

閉包:是一個函式,返回值依賴於宣告在函式外部的一個或多個變數。

這裡我們引入一個自由變數 a,這個變數定義在函式外面。

這樣定義的函式變數 add成為一個"閉包",因為它引用到函式外面定義的變數,定義這個函式的過程是將這個自由變數捕獲而構成一個封閉的函式