Scala返回类型不匹配

时间:2014-09-29 04:45:14

标签: scala

使用此代码:

val kv: HashMap[Int, Double] = HashMap[Int, Double]()
val temp = valuesList.list.foreach { (id: Int, value: Option[Double]) => 
  val kvValue: Double = kv.getOrElse(id, 0)
  val nvValue: Double = value.getOrElse(0)
  val nv = kvValue + nvValue
  kv.put(id, nv)
}

我收到此错误:

type mismatch;
 found   : (Int, Option[Double]) => Option[Double]
 required: ((Int, Option[Double])) => ?

似乎无法找到解决方案......

1 个答案:

答案 0 :(得分:1)

我猜你的功能错误了。

valuesList可能是元组列表。也就是List[(Int, Option[Double])]

因此foreach为您的匿名函数提供了元组,而不是IntOption

一个快速的解决方案是使用case构建一个部分函数,​​它会轻率编译器为你解包元组。

import scala.collection.mutable.HashMap

val kv: HashMap[Int, Double] = HashMap[Int, Double]()
val valuesList = List(1-> Option(1.0))

val temp = valuesList foreach {
  case (id: Int, value: Option[Double]) =>
    val kvValue: Double = kv.getOrElse(id, 0)
    val nvValue: Double = value.getOrElse(0)
    val nv = kvValue + nvValue
    kv.put(id, nv)
}

println(kv)
// gives Map(1 -> 1.0)

请确保我在此更改了valuesList