Scala - ParHashMap没有withDefault

时间:2014-08-17 05:54:55

标签: scala parallel-processing hashmap

我尝试使用默认值创建ParHashMap,但在使用scalac编译时,我收到以下错误。

  

vmath.scala:41:错误:类型不匹配;发现:   scala.collection.parallel.immutable.ParMap [String,Double]必需:   scala.collection.immutable.Map [字符串,双]       新的FreqVec(值)                   ^ vmath.scala:8:错误:值withDefault不是scala.collection.parallel.immutable.ParMap [String,Double]的成员
  var vals = values.par.withDefault(k => 0.0)

我讨厌要求你为我调试这个,但是我很困惑,因为我已经成功地使用其他地图(可变且不并行)而没有编译错误,并且scala文档说该函数确实存在{{3 }}

以下是我的代码简介

package vmath

import collection.immutable.Map
import collection.parallel.immutable.ParMap

class FreqVec(val values: Map[String, Double]) {
     var vals = values.par.withDefault(k => 0.0)
     ...
}

object FreqVec {
  def apply(values: Map[String, Double]) = {
    new FreqVec(values)
  }
  def apply(values: ParMap[String, Double]) = {
    new FreqVec(values)
  }
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

编译器错误#1告诉您正在尝试传递期望Map的ParMap。我没有看到withDefault缺失错误。确保您没有使用不支持它的旧版本的scala编译器。

以下是使用scala 2.11.0编译的代码版本。

class FreqVec(val values: Map[String, Double]) {
  var vals: ParMap[String, Double] = values.par.withDefault(k => 0.0)

}

class FreqParVec(val values: ParMap[String, Double]) {
  var vals: ParMap[String, Double] = values.withDefault(k=>0.0)
  var valsWithPar: ParMap[String, Double] = values.par.withDefault(k=>0.0)
}

object FreqVec {
  def apply(values: Map[String, Double]) = {
    new FreqVec(values)
  }
}

object FreqParVec {
  def apply(values: ParMap[String, Double]) = {
    new FreqParVec(values)
  }
}