我想对一组对调用map(),但是我得到了一个类型不匹配错误。
例如,假设我想将Int对的列表映射到它们的和的列表:
scala> val ll=List((1,2),(3,4),(5,6))
ll: List[(Int, Int)] = List((1,2), (3,4), (5,6))
scala> ll.map((x:Int,y:Int)=>x+y)
<console>:9: error: type mismatch;
found : (Int, Int) => Int
required: ((Int, Int)) => ?
ll.map((x:Int,y:Int)=>x+y)
^顺便说一下,当尝试运行foreach()时,我得到了一个非常类似的错误:
scala> ll.foreach((x:Int,y:Int)=>println(x,y))
<console>:9: error: type mismatch;
found : (Int, Int) => Unit
required: ((Int, Int)) => ?
ll.foreach((x:Int,y:Int)=>println(x,y))
^?标志代表什么?这里我漏掉了什么?
发布于 2012-10-16 19:56:42
您可以使用pattern matching来获取元素对的元素。
ll.map{ case (x:Int,y:Int) => x + y }您甚至不需要指定类型:
ll.map{ case (x, y) => x + y }当然,这也适用于foreach。
错误消息告诉您,编译器希望找到任意类型(问号)的一个参数(一对整数)的函数,但却找到了两个参数的函数,两个参数都是整数。
发布于 2012-10-16 19:56:33
您可以使用:
ll.map(x => x._1 + x._2)其中x代表元组本身,或者
ll.map(x:(Int,Int) => x._1 + x._2)如果要显式声明类型,请执行以下操作。
发布于 2012-10-16 23:45:19
你可以对一个函数进行元组,这意味着从一个包含N个参数的函数变成一个包含1个参数的函数,这是一个N元组。执行此操作的高阶函数在Function对象上可用。这导致了很好的语法,以及Brian Agnew答案的注释中突出显示的额外类型安全性。
import Function.tupled
ll map tupled(_ + _)https://stackoverflow.com/questions/12914121
复制相似问题