Scala中应用于元组列表的map错误

7
如果在Scala中将map方法应用于元组列表,则会出现以下错误:
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)

但是如果我对 Int 类型的列表应用类似的 map 方法,它就能正常工作:

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)

有人知道为什么吗?谢谢。
1个回答

8
Scala不会自动解构元组。您需要使用花括号:
val s = List((1,2), (3,4))
val result = s.map { case (a, b) => a + b }

或者使用一个类型为元组的单个参数:

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

Dotty(未来的Scala编译器)将带来元组的自动解构。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接