2016-07-15 1 views
3

이것은 IntelliJ의 Scala REPL로 놀면서 흥미로운 일입니다.IntelliJ Scala REPL에서 동일한 개체가 생성 된 방법에 따라 다른 출력물을 얻는 이유는 무엇입니까?

을 감안할 때이 두 라인 :

val myVector = Vector.tabulate(10)((x: Int) => x + 1) 
val myVector2 = (1 to 10).toVector 

REPL 인쇄 :

myVector: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
myVector2: Vector[Int] = Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 

왜 첫 공연을 전체 경로를 않습니다 (scala.collection.immutable.Vector [지능), 그동안 두 번째 벡터 [Int]입니까?

은 실제로 같은 클래스 것을 내가 확인 한 모든 기지를 커버하려면

myVector: Class[?0] = class scala.collection.immutable.Vector 
myVector2: Class[?0] = class scala.collection.immutable.Vector 

이 무엇보다 호기심의 더하지만이 사용할 가능성이 가장 높은 초보자를위한 혼동 될 수있다 REPL.

답변

2

할 수 있습니다 자세한 유형의 정보를 얻을 :

$ scalam 
Welcome to Scala 2.12.0-M5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_92). 
Type in expressions for evaluation. Or try :help. 

scala> :type -v Vector.tabulate(10)((x: Int) => x + 1) 
// Type signature 
scala.collection.immutable.Vector[Int] 

// Internal Type structure 
TypeRef(
    TypeSymbol(
    final class Vector[+A] extends AbstractSeq[A] with IndexedSeq[A] with GenericTraversableTemplate[A,scala.collection.immutable.Vector] with IndexedSeqLike[A,scala.collection.immutable.Vector[A]] with VectorPointer[A @scala.annotation.unchecked.uncheckedVariance] with Serializable with CustomParallelizable[A,scala.collection.parallel.immutable.ParVector[A]] 

) 
    args = List(
    TypeRef(TypeSymbol(final abstract class Int extends AnyVal)) 
) 
) 

scala> :type -v (1 to 10).toVector 
// Type signature 
Vector[Int] 

// Internal Type structure 
AliasTypeRef(
    Alias(type Vector[+A] = scala.collection.immutable.Vector[A]) 
    args = List(
    TypeRef(TypeSymbol(final abstract class Int extends AnyVal)) 
) 
    normalize = TypeRef(
    TypeSymbol(
     final class Vector[+A] extends AbstractSeq[A] with IndexedSeq[A] with GenericTraversableTemplate[A,scala.collection.immutable.Vector] with IndexedSeqLike[A,scala.collection.immutable.Vector[A]] with VectorPointer[A @scala.annotation.unchecked.uncheckedVariance] with Serializable with CustomParallelizable[A,scala.collection.parallel.immutable.ParVector[A]] 

    ) 
    args = List(
     TypeRef(TypeSymbol(final abstract class Int extends AnyVal)) 
    ) 
) 
) 
당신은 말할 수

, 내가 그랬던 것처럼, "? 뭐"

def toVector: Vector[A] = to[Vector] 

tabulate 팩토리 메소드는 GenTraversableFactory에 내가 거기에 가지 않을 것입니다 : TraversableOnce.toVector에서

scala.Vector 입력있다. 하지만 타입 인자 인 return 타입은 unaliased Vector로 쉐이크됩니다.

값과 유형의 맞춤 인쇄를 검토하고 있다고 덧붙여 야합니다. 그리고이 문제를 피하기 위해 유형을 표준화하는 옵션을 추가하는 comment on the :type command이 있습니다.

또한, 여기에 좋은 하나 :

scala> Vector 
res0: collection.immutable.Vector.type = [email protected] 
+1

이 우수한 응답 @ 솜 - snytt입니다. 고마워, 나는 오늘 새로운 것을 배웠다. –

관련 문제