【问题标题】:Scala cannot map list of doublesScala无法映射双打列表
【发布时间】:2014-04-25 01:21:44
【问题描述】:

我有一个带有属性location 的案例类,它是一个包含双精度的 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 )

有人可以解释这背后的基本原理以及我的语法有什么问题吗?想要告诉我的所需类型签名是什么?

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    Product2.productIterator 返回Iterator[Any],因此您的列表的实际类型是List[Any]。这就是为什么您的 map 函数需要 Any => ?

    http://www.scala-lang.org/api/current/index.html#scala.Product2

    【讨论】:

      【解决方案2】:

      使用模式匹配 (case)

      loc map {case (x:Double) => x + 10.0}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-27
        • 1970-01-01
        • 2023-03-04
        • 2011-10-23
        • 1970-01-01
        • 2010-10-05
        相关资源
        最近更新 更多