我仍然是 Scala 程序员新手,如果这个问题看起来很幼稚,很抱歉,但我搜索了一段时间并没有找到解决方案。我使用的是 Scala 2.8,我有一个类 PXGivenZ 定义为:
class PXGivenZ (val x:Int, val z:Seq[Int], val values: Map[Seq[Int], Map[Int, Double]] ){...}
当我尝试将该类的一个元素实例化到另一个程序块中时:
// x is an Int
// z is a LinkedList of Int
...
var zMap = new HashMap[Seq[Int], HashMap[Int, Double]]
...
val pxgivenz = new PXGivenZ(x, z, zMap)
我收到以下错误:
found : scala.collection.mutable.HashMap[Seq[Int],scala.collection.mutable.HashMap[Int,Double]]
required: Map[Seq[Int],Map[Int,Double]]
val pxgivenz = new PXGivenZ(x, z, zMap)
^
显然我没有得到一些东西:Map[Seq[Int],Map[Int,Double]] 与 HashMap[Seq[Int], HashMap[Int,Double]] 有何不同?还是“可变”类有问题?
在此先感谢任何愿意帮助我的人!
最佳答案
默认情况下,Map
在 Scala 文件中导入的是 scala.collection.immutable.Map
而不是 scala.collection.Map
.当然,就您而言, HashMap 是可变映射,而不是不可变映射。
因此,如果你想要 Map
指 scala.collection.Map
在您的文件中,您必须明确地导入它:
import scala.collection.Map
这种选择的原因是您不会以相同的方式操作不可变和可变结构。因此,scala 默认推断您将使用“最安全”的不可变结构。如果您不想这样做,则必须明确更改它。
关于Scala类型不匹配问题(预期Map,发现scala.collection.mutable.HashMap),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122558/