Scala 如何使用:*实现类型转换?

Scala 如何使用:*实现类型转换?,scala,Scala,val t=Vector(1到3:*) 返回: val t=Vector(1到3) 返回: scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive] = Vector(Range(1, 2, 3)) 如何从中进行类型转换 scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive] 到 使用以下方法实现:

val t=Vector(1到3:*)

返回:

val t=Vector(1到3)

返回:

scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive] = Vector(Range(1, 2, 3))
如何从中进行类型转换
scala.collection.immutable.Vector[scala.collection.immutable.Range.Inclusive]

使用以下方法实现:*

您正在使用,即
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到3
创建范围对象

因此
向量(1到3)
创建范围对象的向量,而不是int向量


.*
将范围中的元素扩展为varargs,因此它会生成所需的向量。

so是将范围扩展为varargs的自定义语法?@user470184
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)