Jason Zhu Jason Zhu - 19 days ago 5
Scala Question

map error when applying on list of tuples in scala

If applying

map
method to a list of tuple in Scala, it complains error as below:

scala> val s = List((1,2), (3,4))
s: List[(Int, Int)] = List((1,2), (3,4))

scala> s.map((a,b) => a+b)
<console>:13: error: missing parameter type
Note: The expected type requires a one-argument function accepting a 2-Tuple.
Consider a pattern matching anonymous function, `{ case (a, b) => ... }`
s.map((a,b) => a+b)
^
<console>:13: error: missing parameter type
s.map((a,b) => a+b)


But if I apply similar
map
method to list of Int, it works fine:

scala> val t = List(1,2,3)
t: List[Int] = List(1, 2, 3)

scala> t.map(a => a+1)
res14: List[Int] = List(2, 3, 4)


Anyone knows why it is? Thanks.

Answer

Scala dosen't deconstruct tuples automatically. You'll need to either use curly brackets:

val s = List((1,2), (3,4))
val result = s.map { case (a, b) => a + b }

Or use a single parameter of type tuple:

val s = List((1,2), (3,4))
val result = s.map(x => x._1 + x._2)

Dotty (the future Scala compiler) will bring automatic deconstruction of tuples.

Comments