Scala函式特性系列 高階函式

2021-07-10 02:17:26 字數 1220 閱讀 3776

帶函式引數的函式由於是乙個接受函式引數的函式,故被稱為

高階函式,像之前講到的

map()

函式就是高階函式。如下例所示:

上述**中,

函式接受乙個函式

f作為引數,接受乙個

int型別的引數,進行

f(v)

運算,在下面又給出了

f具體的定義(

layout

函式)。

同樣的,高階函式也可以產出另乙個函式(即返回結果為乙個函式,而不是某個值或物件),如下例所示:

這裡函式

rectangle

的輸出是乙個計算矩形周長的函式,矩形長已固定。

在高階函式中,經常將只需要執行一次的函式定義為匿名函式作為引數傳遞給高階函式,就好像

map()

、filter()

等高階函式中經常能看到使用了匿名函式作為引數。匿名函式在這裡有乙個特性能夠幫助我們寫出更容易閱讀的函式——引數推斷

正常情況下,我們使用匿名函式的方式如下:

即在map

函式中定義匿名函式(a: double) => a * 3,但是由於

map函式知道你傳入的是乙個型別為

(double)=> double

型別的函式,故可以簡化為下面的**:

並且如果匿名函式只有乙個引數,則可以省略

(),繼續簡化:

在此基礎上,如果引數在

=>

右邊只出現了一次,則可以用

_替換它:

Scala高階特性 函式式程式設計

目標一 深入理解高階函式 目標二 深入理解隱式轉換 高階函式 概念scala混合了物件導向和函式式的特性,我們通常將可以做為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是 頭等公民 高階函式包含 作為值的函式 匿名函式 閉包 柯里化等等。作為值的函式 可以像任何其他資料型別一樣被傳遞和...

Scala高階函式

在scala中,無法直接操縱方法,只能直接操縱函式,所以需要使用 import scala math.val temp ceil val num 3.14 println fun temp num temp的型別是 double double,意為接受double引數並返回double的函式。能夠對...

Scala 高階函式

import scala.math.val num 3.14val func ceil 意味著確實指的是這個函式,而不是忘記了傳引數 func是乙個函式變數,內容儲存的是個函式 val v func num println v val arr array 1.0,3.14,4 map func 將函...