2013-11-04 3 views
1

val t = Vector(1 to 3: _*)
반환 :유형 변환은 다음을 사용하여 어떻게 이루어 집니까?

scala.collection.immutable.Vector[Int] = Vector(1, 2, 3) 

val t = Vector(1 to 3)

반환 :

scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive] = Vector(Range(1, 2, 3)) 

방법

scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive]

에서 타입 변환입니다

scala.collection.immutable.Vector[Int] 

당신은 companion object for Vector, 즉 apply[A](elems: A*): Vector[A] 방법을 사용하고 : _*

답변

2

을 사용하여 달성.

볼 수 있듯이, 적용은 인수로 가변 인자 소요되므로 이는 :

val vec = Vector(1 to 3: _*) 

타이핑로서 효과적으로 동일한 작업을 끝낸다 가변 인자에 대한 범위 (시퀀스 임), 팽창 :

이 동안
val vec = Vector(1, 2, 3) 

:

val rangeVec = Vector(1 to 3) 

의 범위를 확장하지 않습니다. 즉, 전체 범위이 varargs의 인수 중 하나로 처리됩니다. 따라서 할 수 있습니다 :

scala> val rangeVec = Vector(1 to 3, 6 to 10) 
rangeVec: scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive] = Vector(Range(1, 2, 3), Range(6, 7, 8, 9, 10)) 

범위의 벡터를 갖습니다.

재미있는 사실은 : 당신이 범위 벡터에서 범위를 평평하게하려면, 그것은 아주 쉽게 :

scala> rangeVec.flatten 
res4: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3, 6, 7, 8, 9, 10) 
+0

그래서 _ *는 범위를 varargs까지 확장하기위한 맞춤 구문입니까? –

+1

@ user470184 [그렇게 말할 수 있다고 생각합니다] (http://stackoverflow.com/questions/4176440/syntax-sugar-for-treating-seq-as-method-parameters) –

1

1 to 3는 다양한 오브젝트를 작성합니다.

그래서 Vector(1 to 3)은 int 벡터가 아닌 범위 객체의 벡터를 만듭니다.

_*은 범위의 요소를 varargs로 확장하여 필요한 벡터를 생성합니다.

관련 문제