Scala高階函式

2021-07-22 03:24:52 字數 2300 閱讀 6047

在scala中,無法直接操縱方法,只能直接操縱函式,所以需要使用_

import

scala

.math._

val temp

=ceil _

val num

=3.14

println

("fun:"

+temp

(num

))

temp的型別是(double)=>double,意為接受double引數並返回double的函式。能夠對fun做的有:呼叫,傳遞。

val fun 

=math

.ceil _

//向上取整

//函式作為引數

array

(3.14

,1.42

,2.0

).map

(fun

).foreach

(println

) 2.0 2.0

array

(3.14

,1.42

,2.0

).map

(fun

).foreach(x

=>

print(x

+" "

))

函式不一定需要名稱,可以將匿名函式賦值給變數,也可以當引數傳遞。

val triple =(

x:double

)=>3*

xarray

(3.14

,1.42

,2.0

).map((

x:double

)=>3*

x).foreach(x

=>

print(x

+" "

)) 4.26 6.0

println

("\n------"

)array

(3.14

,1.42

,2.0

).map

.foreach(x

=>

print(x

+" "

))println

("\n------"

) 4.26 6.0

接受函式引數或者是返回函式的函式,被稱為高階函式(higher-order function)。

實現乙個接受另乙個函式為引數的函式:

defhigh_order_functions(f

:(double

)=>

double)=

f(0.25

)該函式的型別是:(

(double

)=>

double

)=>

double

println

(high_order_functions

(math

.ceil _

))println

(high_order_functions

(math

.sqrt _

))返回乙個函式的函式:

//mulby可以產出任何兩個數相乘的函式

defmulby

(factor

:double)=

(x:double

)=>

factor *x

val quintuple

=mulby(5

)//返回值:(x: double) => 5 * x

println

(quintuple(20

))//5 * 20

前面有定義高階函式def valueatonequarter(f: (double) => double) = f(0.25), 因為已知引數的型別,所以scala會盡可能推斷出型別,在傳入引數時,可以省掉一些內容。

println

(high_order_functions((

x:double

)=>3*x))

high_order_functions((x

)=>3*

x)//已知引數型別,可以省掉double

high_order_functions(x

=>3*

x)//只有乙個引數時,可以省去()

high_order_functions(3

*_ )//引數只在右側出現一次,可以用_(佔位符)替換

**:

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

Scala 高階函式

1 定義 當乙個函式包含其他函式作為其引數或者返回結果為乙個函式時,該函式被稱為高階函式 2 不採用高階函式,使用遞迴實現下面功能 2的a次方 def poweroftwo a int int 計算乙個整數到另乙個整數的連加和 def sumints x int,y int int 計算乙個整數到另...