3 回答

TA貢獻1860條經驗 獲得超9個贊
您可以根據某些條件先將它們分組。在本文中,我將僅說明下劃線字符和右箭頭。
_._包含句點。Scala中的句點始終表示方法調用。因此,在句號的左邊有接收方,在消息的右邊(方法名)?,F在_是Scala中的特殊符號。關于它有幾篇文章,例如此博客條目所有用例。在這里,這是一個匿名函數的捷徑,這是一個接受一個參數并_在其上調用方法的函數的快捷方式?,F在_不是有效的方法,因此很可能您已經看到_._1或類似的東西,即_._1在函數參數上調用方法。_1to _22是提取元組特定元素的元組方法。例:
val tup = ("Hallo", 33)
tup._1 // extracts "Hallo"
tup._2 // extracts 33
現在,假設函數應用程序快捷方式的用例。給定一個將整數映射到字符串的映射:
val coll = Map(1 -> "Eins", 2 -> "Zwei", 3 -> "Drei")
糟糕,標點符號已經再次出現。連字符和大于號字符(類似于右箭頭)是產生的運算符Tuple2。因此,無論編寫(1, "Eins")或的結果都沒有區別1 -> "Eins",只是后者更易于閱讀,尤其是在像地圖示例這樣的元組列表中。該->是什么神奇的,它是像其他一些運營商,可因為你把所有的隱式轉換的對象scala.Predef范圍。這里發生的轉換是
implicit def any2ArrowAssoc [A] (x: A): ArrowAssoc[A]
哪里ArrowAssoc有->創建的方法Tuple2。因此1 -> "Eins"是實際的呼叫Predef.any2ArrowAssoc(1).->("Eins")。好。現在回到帶有下劃線字符的原始問題:
// lets create a sequence from the map by returning the
// values in reverse.
coll.map(_._2.reverse) // yields List(sniE, iewZ, ierD)
這里的下劃線縮短了以下等效代碼:
coll.map(tup => tup._2.reverse)
請注意,mapMap 的方法將鍵和值的元組傳遞給函數參數。因為我們只對值(字符串)感興趣,所以我們使用_2元組上的方法提取它們。
添加回答
舉報