W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Scala 提供了多種方法來簡化函數(shù)字面量中多余的部分,比如前面例子中 filter 方法中使用的函數(shù)字面量,完整的寫法如下:
(x :Int ) => x +1
首先可以省略到參數(shù)的類型,Scala 可以根據(jù)上下文推算出參數(shù)的類型,函數(shù)定義可以簡化為:
(x) => x +1
這個函數(shù)可以進一步去掉參數(shù)的括號,這里的括號不起什么作用:
x => x +1
Scala 還可以進一步簡化,Scala 允許使用“占位符”下劃線”_”來替代一個或多個參數(shù),只要這個參數(shù)值函數(shù)定義中只出現(xiàn)一次,Scala編譯器可以推斷出參數(shù)。比如:
scala> val someNumbers = List ( -11, -10, - 5, 0, 5, 10)
someNumbers: List[Int] = List(-11, -10, -5, 0, 5, 10)
scala> someNumbers.filter(_ >0)
res0: List[Int] = List(5, 10)
可以看到簡化后的函數(shù)定義為 > 0,你可以這樣來理解,就像我們以前做過的填空題,“”為要填的空,Scala 來完成這個填空題,你來定義填空題。
有時,如果你使用_來定義函數(shù),可能沒有提供足夠的信息給 Scala 編譯器,此時 Scala 編譯器將會報錯,比如,定義一個加法函數(shù)如下:
scala> val f = _ + _
<console>:7: error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2))
val f = _ + _
^
<console>:7: error: missing parameter type for expanded function ((x$1: <error>, x$2) => x$1.$plus(x$2))
val f = _ + _
Scala 編譯器無法推斷出_的參數(shù)類型,就報錯了,但如果你給出參數(shù)的類型,依然可以使用_來定義函數(shù),比如:
scala> val f = (_ :Int ) + ( _ :Int)
f: (Int, Int) => Int = <function2>
scala> f (5,10)
res1: Int = 15
因為替代的參數(shù)在函數(shù)體中只能出現(xiàn)一次,因此多個“_”代表多個參數(shù)。第一個“_”代表第一個參數(shù),第二個“\”代表第二個參數(shù),以此類推。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: