在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 計算乙個整數到另...