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]
使用: _*
答案 0 :(得分:2)
您使用的是companion object for Vector
,即apply[A](elems: A*): Vector[A]
方法。
如您所见,apply将varargs作为参数,因此:
val vec = Vector(1 to 3: _*)
将范围(这是一个序列)扩展为varargs,最终有效地与输入相同:
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)
答案 1 :(得分:1)
1 to 3
创建一个范围对象。
所以Vector(1 to 3)
创建了一个范围对象的向量,而不是int的向量。
_*
将范围中的元素扩展为varargs,因此它会生成您需要的向量。