W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Scala 中函數(shù)為頭等公民,你不僅可以定義一個(gè)函數(shù)然后調(diào)用它,而且你可以寫一個(gè)未命名的函數(shù)字面量,然后可以把它當(dāng)成一個(gè)值傳遞到其它函數(shù)或是賦值給其它變量。下面的例子為一個(gè)簡單的函數(shù)字面量(參考整數(shù)字面量,3 為一整數(shù)字面量)。
(x :Int ) => x +1
這是個(gè)函數(shù)字面量,它的功能為+1. 符好 => 表示這個(gè)函數(shù)將符號(hào)左邊的東西(本例為一個(gè)整數(shù)),轉(zhuǎn)換成符號(hào)右邊的東西(加 1)。
函數(shù)字面量為一個(gè)對(duì)象(就像 3 是個(gè)對(duì)象),因此如果你愿意的話,可以把這個(gè)函數(shù)字面量保持在一個(gè)變量中。這個(gè)變量也是一函數(shù),因此你可以使用函數(shù)風(fēng)格來調(diào)用它,比如:
scala> var increase = (x :Int ) => x +1
increase: Int => Int = <function1>
scala> increase(10)
res0: Int = 11
注意函數(shù)字面量 (x:Int) => x + 1 的類型為,它在 Scala 內(nèi)部表示為帶有一個(gè)參數(shù)的類 Function1 的一個(gè)對(duì)象,其它如 FunctionN 代表帶有N個(gè)參數(shù)的函數(shù),F(xiàn)unction0 代表不含參數(shù)的函數(shù)類型。
如果函數(shù)定義需要多條語句,可以使用{},比如:
scala> var increase = (x :Int ) => {
| println("We")
| println("are")
| println("here")
| x + 1
| }
increase: Int => Int = <function1>
scala> increase (10)
We
are
here
res0: Int = 11
什么我們了解到了函數(shù)字面量的基本概念,它可以作為參數(shù)傳遞個(gè)其它函數(shù),比如很多 Scala 的庫允許你使用函數(shù)作為參數(shù),比如 foreach 方法,它使用一個(gè)函數(shù)參數(shù),為集合中每個(gè)運(yùn)算調(diào)用傳入的函數(shù)。例如:
scala> val someNumbers = List ( -11, -10, - 5, 0, 5, 10)
someNumbers: List[Int] = List(-11, -10, -5, 0, 5, 10)
scala> someNumbers.foreach((x:Int) => println(x))
-11
-10
-5
0
5
10
再比如,Scala 的集合也支持一個(gè) filter 方法用來過濾集合中的元素,filter 的參數(shù)也是一個(gè)函數(shù),比如:
scala> someNumbers.filter( x => x >0)
res1: List[Int] = List(5, 10)
使用 x => x >0,過濾掉小于 0 的元素。 如果你熟悉 lambda 表達(dá)式,x => x >0 為函數(shù)的 lambda 表達(dá)式。
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)系方式:
更多建議: