W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
前面例子中我們使用“_” 來(lái)代替單個(gè)的參數(shù),實(shí)際上你也可以使用“_”來(lái)代替整個(gè)參數(shù)列表,比如說(shuō),你可以使用 print 來(lái)代替 println ().someNumbers.foreach(println _)。
Scala 編譯器自動(dòng)將上面代碼解釋成:
someNumbers.foreach( x => println (x))
因此這里的“_” 代表了 Println 的整個(gè)參數(shù)列表,而不僅僅替代單個(gè)參數(shù)。當(dāng)你采用這種方法使用“_”,你就創(chuàng)建了一個(gè)部分應(yīng)用的函數(shù)(partially applied function)。 在 Scala 中,當(dāng)你調(diào)用函數(shù),傳入所需參數(shù),你就把函數(shù)“應(yīng)用”到參數(shù)。 比如:一個(gè)加法函數(shù)。
scala> def sum = (_:Int) + (_ :Int) + (_ :Int)
sum: (Int, Int, Int) => Int
scala> sum (1,2,3)
res0: Int = 6
一個(gè)部分應(yīng)用的函數(shù)指的是你在調(diào)用函數(shù)時(shí),不指定函數(shù)所需的所有參數(shù),這樣你就創(chuàng)建了一個(gè)新的函數(shù),這個(gè)新的函數(shù)就稱為原始函數(shù)的部分應(yīng)用函數(shù),比如說(shuō)我們固定 sum 的第一和第三個(gè)參數(shù),定義如下的部分應(yīng)用函數(shù):
scala> val b = sum ( 1 , _ :Int, 3)
b: Int => Int = <function1>
scala> b(2)
res1: Int = 6
變量 b 的類型為一函數(shù),具體類型為 Function1(帶一個(gè)參數(shù)的函數(shù)),它是由 sum 應(yīng)用了第一個(gè)和第三個(gè)參數(shù),構(gòu)成的。調(diào)用b(2),實(shí)際上調(diào)用 sum (1,2,3)。
再比如我們定義一個(gè)新的部分應(yīng)用函數(shù),只固定中間參數(shù):
scala> val c = sum (_:Int, 2, _:Int)
c: (Int, Int) => Int = <function2>
scala> c(1,3)
res2: Int = 6
變量 c 的類型為 Function2,調(diào)用 c(1,3) 實(shí)際上也是調(diào)用 sum (1,2,3)。
在 Scala 中,如果你定義一個(gè)部分應(yīng)用函數(shù)并且能省去所有參數(shù),比如 println ,你也可以省掉“”本身,比如:
someNumbers.foreach(println _)
可以寫成:
someNumbers.foreach(println)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: