2011-04-20 4 views
4

, 그것은이이 경우에서와 같이,하지만 모든 진실하지의 유형은스칼라 REPL에서 인쇄하는 유형은 무엇입니까? 나는 REPL에있는 작은지도를 만들 때

scala> Map(1->1, 2->2)          
res8: scala.collection.immutable.Map[Int,Int] = Map((1,1), (2,2)) 

immutable.Map 것을 알려줍니다

scala> Map(1->1, 2->2).getClass 
res9: java.lang.Class[_] = class scala.collection.immutable.Map$Map2 

방법 Scala는 표현식의 유형으로 인쇄 할 대상을 결정합니까?

답변

7

짧은 답변은 스칼라 REPL이 표현식 Map(1->1, 2->2)에서 유추 된 결과의 정적 유형을 인쇄하고 getClass가 정적 유형의 하위 유형이 될 수있는 동적 유형을 반환한다는 것입니다.

스칼라의 타입 추론 엔진이 어떻게 작동하는지에 대한 대답은 더 길어집니다. Scala Language Reference에서 관련 섹션을 읽고 싶을 것입니다.

+0

정적 유형은 평가 된 표현식의 결과 유형이고 동적 유형은 해당 유형을 구현하는 실제 클래스입니까? –

+0

아, 오래되고 빠르며 더러운 대답이 편집 트릭으로 이어져 내 질문이 어리석은 것처럼 보입니다. –

+0

가장 간단한 경우 정적 메서드는 메서드 정의의 반환 형식과 정확히 일치합니다. 그렇지 않으면 (유추 된 타입 파라미터를 가진 메소드, 암시적인 파라미터에 의존하는 리턴 타입 등), 상황이 복잡해질 수 있으므로 타입 유추 엔진의 세부 사항을 체크 아웃해야 할 것이다. 동적 타입은 실행되는 메소드의 몸체에서 정확히 무엇이 일어나는지에 의해 주어진다 (여기에서 관련된 메소드는'Map.apply()'이다). –

관련 문제