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

2018-09-28 18:24 更新

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號