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]

を使用して達成: _*

4

2 に答える 2

2

のコンパニオン オブジェクト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 の引数の 1 つとして扱われます。したがって、次のことが可能です。

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)
于 2013-11-04T09:43:34.457 に答える
1

1 to 3範囲オブジェクトを作成します。

そのVector(1 to 3)ため、int のベクトルではなく、範囲オブジェクトのベクトルを作成します。

_*範囲内の要素を可変引数に拡張するため、必要なベクトルが生成されます。

于 2013-11-04T09:48:00.360 に答える