2011-08-19 2 views
8

아직 초보 스칼라 프로그래머이므로 미안하지만이 질문이 순진 해 보이지만 잠시 동안 검색 한 결과 해결책이 없습니다. 나는 스칼라 2.8을 사용하고, 나는 클래스 PXGivenZ 정의가로 :스칼라 유형 불일치 문제 (예상지도, scala.collection.mutable.HashMap을 찾음)

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) 

내가 얻을 다음과 같은 오류 :지도 [서열 [지능], 맵 [INT, 더블] [는 HashMap [서열 [지능], HashMap의 다른 Int 인 방법 : 분명히 내가하지 않는 것이 있습니다

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) 
              ^

,더블]]? 아니면 "변경 가능한"클래스에 문제가 있습니까?

나를 도울 사람에게 미리 감사드립니다!

답변

20

기본적으로 스칼라 파일로 가져 오는 Mapscala.collection.immutable.Map이고 scala.collection.Map이 아닙니다. 그리고 물론, 당신의 경우, HashMap은 가변적 인 맵이지 변경할 수없는 맵입니다.

따라서 당신이 Map이 파일에 scala.collection.Map을 참조하는 원한다면, 당신은 명시 적으로 가져올 필요가 :

import scala.collection.Map 
이 선택의 이유는 당신이 불변과에서 변경 가능한 구조를 조작 할 것입니다

같은 길. 따라서 스칼라는 기본적으로 "가장 안전한"불변 구조를 사용합니다. 그렇게하고 싶지 않으면 명시 적으로 변경해야합니다.

+0

감사! 그게 문제를 해결했습니다 :-) – Alberto

+0

'HashMap'은 변경 가능하거나 변경할 수 없습니다. 변경할 수있는 버전을 가져와야합니다. –