Scala中的下劃線(underscore)到底有多少種應(yīng)用場(chǎng)景?

  1. 作為"通配符”,import導(dǎo)入包的所有成員,類似Java中的*。如import scala.math._

  2. _*作為一個(gè)整體,告訴編譯器你希望將某個(gè)參數(shù)當(dāng)作參數(shù)序列處理!例如val s = sum(1 to 5:_*)就是將1 to 5當(dāng)作參數(shù)序列處理。

  3. 占位符,指代一個(gè)集合中的每個(gè)元素。比如對(duì)collection或sequence調(diào)用方法map、filter、sortWith、foreach等等表示對(duì)每一個(gè)元素進(jìn)行處理。例如我們要在一個(gè)Array a中篩出偶數(shù),并乘以2,可以用以下辦法:
    a.filter(%2==0).map(2*)
    List(1,2,3).foreach(println(_))

  4. 在元組中,可以用方法_1, _2, _3訪問組員。如a._2。其中句點(diǎn)可以用空格替代。
    ("a","b","c")._3

  5. 使用模式匹配可以用來獲取元組的組員,n來取得第n個(gè)元素。
    例如:
    val t = ("a","b","c")
    val (first, second, third) = t
    但如果不是所有的部件都需要,那么可以在不需要的部件位置上使用
    。
    比如上一例中val (first, second, _) = t

  6. 下劃線代表的是某一類型的默認(rèn)值,對(duì)變量進(jìn)行默認(rèn)初始化。
    對(duì)于Int來說,var i:Int=
    ,i是0。
    對(duì)于Double來說,它是0.0
    對(duì)于引用類型,它是null。
    List(1,2,3).foreach(println(_))

  7. 類的setter方法,比如類A中定義了var f,則相當(dāng)于定義了setter方法 f_=。也可以自己定義f_= 方法來完成更多的事情,比如設(shè)置前作一些判斷或預(yù)處理之類的操作

善用google和stackoverflow:

What are all the uses of an underscore in Scala?

scala在線學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容