Alb*_*rto 14 types scala map mismatch
我仍然是一个新手Scala程序员,很抱歉,如果这个问题可能看起来很幼稚,但我搜索了一段时间后发现没有解决方案.我使用的是Scala 2.8,我将PXGivenZ类定义为:
class PXGivenZ (val x:Int, val z:Seq[Int], val values: Map[Seq[Int], Map[Int, Double]] ){...}
Run Code Online (Sandbox Code Playgroud)
当我尝试将该类的元素实例化为另一个程序块时,如下所示:
// 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)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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)
^
Run Code Online (Sandbox Code Playgroud)
显然我没有得到:Map [Seq [Int],Map [Int,Double]]与HashMap [Seq [Int],HashMap [Int,Double]]的不同之处是什么?或者"可变"课程出了什么问题?
在此先感谢能帮助我的人!
Nic*_*las 27
默认情况下,Map在scala文件中导入的是scala.collection.immutable.Map和不是scala.collection.Map.当然,在你的情况下,HashMap是一个可变的地图,而不是一个不可变的地图.
因此,如果您希望在您的文件中Map引用scala.collection.Map它,则必须明确地导入它:
import scala.collection.Map
Run Code Online (Sandbox Code Playgroud)
这种选择的原因是你不会以同样的方式操纵不可变和可变的结构.因此,scala默认推断您将使用"最安全"的不可变结构.如果您不想这样做,则必须明确更改它.
| 归档时间: |
|
| 查看次数: |
13408 次 |
| 最近记录: |