收藏中的元組
元組通常在集合中使用,但必須以特定方式處理它們。例如,給定以下元組列表:
scala> val l = List(1 -> 2, 2 -> 3, 3 -> 4)
l: List[(Int, Int)] = List((1,2), (2,3), (3,4))
使用隱式元組解包將元素新增到一起似乎很自然:
scala> l.map((e1: Int, e2: Int) => e1 + e2)
但是,這會導致以下錯誤:
<console>:9: error: type mismatch;
found : (Int, Int) => Int
required: ((Int, Int)) => ?
l.map((e1: Int, e2: Int) => e1 + e2)
Scala 不能以這種方式隱式解包元組。我們有兩個選項來修復此地圖。第一個是使用位置訪問器 _1
和 _2
:
scala> l.map(e => e._1 + e._2)
res1: List[Int] = List(3, 5, 7)
另一個選擇是使用 case
語句使用模式匹配來解包元組:
scala> l.map{ case (e1: Int, e2: Int) => e1 + e2}
res2: List[Int] = List(3, 5, 7)
這些限制適用於應用於元組集合的任何高階函式。