Scala高階函式
概念:如果一個函式的傳入引數為函式或者返回值是函式,則該函式即為高階函式。
3.7.1. 匿名函式的定義和案例
1、匿名函式定義:
(x: Int) => x + 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會盡可能幫你推斷出型別資訊。
案例需求:
- 要遍歷陣列中的資料,標準語法如下:
b、接著將語法變型:你可以省略掉x的型別(自動推斷)
c、接著將語法變型:對於只有一個引數的函式,你還可以省略掉()
d、接著將語法變型:如果引數在=>右側只出現一次,你還可以寫成下面這種形式
注意:1、_代表萬用字元,代表任意元素。此處代表集合中的元素
2、_放入print()方法時候,導致無法推斷_元素型別,就會報錯
f、接著將語法變型:當然你一定可以將{}去掉的
注意:scala語法格式寫法非常靈活,以後寫程式碼可以多嘗試幾種寫法,但一定要註釋明確
3.7.6. 閉包
閉包:是一個函式,返回值依賴於宣告在函式外部的一個或多個變數。
這裡我們引入一個自由變數 a,這個變數定義在函式外面。
這樣定義的函式變數 add成為一個"閉包",因為它引用到函式外面定義的變數,定義這個函式的過程是將這個自由變數捕獲而構成一個封閉的函式。