Jason Zhu Jason Zhu - 1 year ago 95
Scala Question

map error when applying on list of tuples in scala

If applying

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
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 Source

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download