我有一个带有属性location
的case类,它是一个包含双精度的tuple2实例。
我首先使用以下内容将其转换为列表:
testPlace.location.productIterator.toList
这会生成一个两元素列表
List(78.0342, -139.2234)
在此列表中运行简单映射似乎失败,引发了以下编译错误:
loc.map((x:Double) => x + 10.0)
type mismatch;
found : Double => Double
required: Any => ?
loc.map( (x:Double) => x + 10.0 )
有人可以解释这背后的基本原理以及我的语法有什么问题吗?试图告诉我的那种所需类型签名是什么?
答案 0 :(得分:6)
Product2.productIterator
会返回Iterator[Any]
,因此您的列表的实际类型为List[Any]
。这就是您的map
函数期望Any => ?
。
http://www.scala-lang.org/api/current/index.html#scala.Product2
答案 1 :(得分:1)
使用模式匹配(case
)
loc map {case (x:Double) => x + 10.0}