Scala 函數(shù)–部分應(yīng)用的函數(shù)

2018-09-28 18:24 更新

函數(shù)–部分應(yīng)用的函數(shù)

前面例子中我們使用“_” 來(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)
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)