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