定義:引數為函式的函式稱為高階函式
① 在 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...