scala 高階函式 高階運算元

2021-09-26 20:50:10 字數 2367 閱讀 5219

定義:引數為函式的函式稱為高階函式

① 在 scala 中, 函式是一等公民,函式可以像物件一樣進行傳遞函式可以賦值給變數

函式賦值給變數例子:

def main

(args: array[string]

): unit =

def foo()

=

上面的例子中,foo()函式並沒有引數, 我們寫乙個可以傳入引數的函式傳遞給變數

def main

(args: array[string]

): unit =

def foo1

(n: int)

=def foo()

=

高階函式表明:引數為函式的函式稱為高階函式**, 也就是說,我們的函式需要接受乙個函式才是乙個高階函式

def main

(args: array[string]

): unit =

// 定義乙個函式

def add

(a: int, b: int)

: int = a + b

// 函式 f1 需要傳入乙個函式, 該函式需要兩個 int 型別引數, 並且返回值是 int 型別

def f1

(n:(int, int)

=> int)

: int =

上面例子就是乙個 高階函式 的宣告、呼叫,

可能有朋友就要說了, 這個高階函式跟我直接呼叫 add 函式, 有什麼區別?

這種寫法會簡化我們的**,舉個例子: 我想傳遞乙個陣列,但是我不確定對這個陣列做什麼操作(加減乘除都有可能)

def main

(args: array[string]

): unit =

def add

(a: int)

: int = a +

2def ride

(a: int)

: int = a *

2// arr: 乙個陣列,

// op: 函式, 具體這個函式做什麼我們不知道, 只對該函式的形參及返回值做要求

// 可以理解成對傳入的函式指定了規範: 只允許傳入int 引數, 返回 int引數的函式

def operation

(arr: array[int]

, op: int =

> int)

: unit =

上面的例子中,宣告了乙個高階函式:operation(arr: array[int], op: int => int),當呼叫operation時,傳入乙個陣列, 乙個動作,該動作及表示要做的操作

上面的例子呼叫高階函式的時候, 需要宣告乙個 函式,可以將此過程省略成匿名函式

def main

(args: array[string]

): unit =

// def add(a: int): int = a + 2

//// def ride(a: int): int = a * 2

def operation

(arr: array[int]

, op: int =

> int)

: unit =

因為該匿名函式(a: int) => a + 2需要傳遞給高階函式,而高階函式已經宣告了,入參必須為 int,所以匿名函式的:int也可以省略, 即:

def main

(args: array[string]

): unit =

在該匿名函式中, 僅有乙個形參a,並且該形參a只被引用了一次,所以還可以簡寫

def main

(args: array[string]

): unit =

_ + 2中的_表示引數佔位符,_ + 2表示第乙個引數自身+2,如果有兩個引數,可以寫成:_ + _表示 第乙個引數 + 第二個引數

高階函式的例題

計算 1-100 的 平方,並將該結果集列印在控制台

過濾 1-100 的 奇數

計算 1-100 的總和,並將該結果列印在控制台

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 將函...

Scala高階函式

高階函式 higher order function 高階函式可以使用其他函式作為引數,進入方法內使用,或者使用函式輸出結果作為引數。object demo 函式1,返回當前時間納秒數,long型別 def time t long 可以簡寫為t long,long表示如果傳入引數為方法時返回值為lo...